如何测试使用上下文的 Azure 函数?

How to test an Azure Function that uses Context?

我正在编写一个使用上下文(用于监视目的)的 Azure 函数,这就是我的函数的样子:

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")

我想为这个功能编写集成测试,像这样:

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',
        )

如何创建 Context 对象以传递给我的 Azure 函数?

看起来像 Context is an ABC(Abstract Base Class) class, so you cannot directly instantiate. Instead you could subclass the func.Context class 并将 class 的实例用作 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")