我有一个静态的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(...);
}
}
我该如何测试这个?
我所知道的:
您可以像测试任何其他程序一样测试它。相比之下,考虑一个控制台应用程序。您通常不会测试
Main
,因为这是您编写所有内容的地方。对于 ASP.NET 应用程序也是如此,您很少直接测试 Startup
。相反,您将这些视为不起眼的对象。虽然你不测试它们,但你也会耗尽它们的逻辑。
像
MyAzureFunction
这样的启动代码就属于这一类。虽然您可能无法直接对该函数进行单元测试,但您可以将其视为函数的Composition Root:
public static void MyAzureFunction()
{
var service = new Service(new Dependency())
var result = service.Dosomething(...);
}
组合根应该做的唯一事情是组合一个对象图并委托给一个完成所有工作的方法。
这意味着如果您进行相应的设计,您现在可以测试其他所有内容。
例如,在这里,我们更改了Service
,以便它在其构造函数中具有依赖项。如果您设计该依赖项以使其具有适当的多态性,那么您现在可以使用Test Doubles
来测试
Service
。