I'm writing an Azure Function that uses context (for monitoring purposes), this is what my function looks like:
import logging
import json
import azure.functions as func
def main(req: func.HttpRequest, context: func.Context) -> func.HttpResponse:
logging.info(
"{}\t{}".format(
context.invocation_id, context.function_name
)
)
reponse = "foo"
return func.HttpResponse(json.dumps(reponse), mimetype="application/json")
And I want to write integration test for this function, like this:
import unittest
import azure.functions as func
from MyFunc import main
class TestMyFunc(unittest.TestCase):
def test_myfunc(self):
req = func.HttpRequest(
method="GET",
body=None,
url="/api/myfunc",
)
ctx = ??
reponse = main(req, ctx) # This part fails because of the context
self.assertEqual(
reponse.get_body(),
b'foo',
)
How can I create a Context object to pass to my Azure Function?
CodePudding user response:
Looks like Context
is an ABC(Abstract Base Class) class, so you cannot directly instantiate. Instead you could subclass the func.Context
class and use the instance of that class as ctx
class MockContext(func.Context):
def __init__(self, ii, fn, fd):
self._invocation_id = ii
self._function_name = fn
self._function_directory = fd
@property
def invocation_id(self):
return self._invocation_id
@property
def function_name(self):
return self._function_name
@property
def function_directory(self):
return self._function_directory
ctx = MockContext("Some dummy values")