我有一个静态的 azure 函数,该函数在服务内部有一个 httpclient。
public static void MyAzureFunction ()
{
...........
// inside run
var service = new Service(...)
var result = service.DoSomething(....);
}
另一方面,我有以下内容:
public class Service
{
...//my properties
public Service(...) {...}
...
public Result DoSomething(...)
{
var httpClient = new HttpClient();
//configuring httpClient
var result = await httpClient.GetAsync(...);
}
}
我该如何测试这个?
我所知道的:
- 服务对象未注入(inject)到 Azure 函数中,因此我无法发送模拟。相反,它是被创建的。
- Azure 函数必须属于静态类,因此我无法使用虚拟或重写方法来绕过任何内容,然后模拟它们。
最佳答案
您可以像测试任何其他程序一样测试它。相比之下,考虑一个控制台应用程序。您通常不会测试 Main
,因为这是您编写所有内容的地方。对于 ASP.NET 应用程序也是如此,您很少直接测试 Startup
。相反,您将它们视为 Humble Objects 。虽然您不测试它们,但您也会耗尽它们的逻辑。
类似 MyAzureFunction
的启动代码就属于该类别。虽然您可能无法直接对该函数进行单元测试,但您可以将其视为函数的 Composition Root :
public static void MyAzureFunction()
{
var service = new Service(new Dependency())
var result = service.Dosomething(...);
}
组合根应该做的唯一事情是组合一个对象图并委托(delegate)给一个完成所有工作的方法。
这意味着您现在可以测试其他所有内容(如果您进行相应的设计)。
例如,在这里,我们更改了 Service
,以便它在其构造函数中获取依赖项。如果您设计该依赖项以使其具有适当的多态性,那么您现在可以使用 Test Doubles 测试 Service
.
关于c# - 如何在 C# 中模拟来自 httpclient 的响应,Azure 函数,如何测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77261821/