如何在 C# 中模拟来自 httpclient 的响应,Azure 函数,如何测试

问题描述 投票:0回答:1

我有一个静态的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(...);
}

}

我该如何测试这个?

我所知道的:

  1. 服务对象没有注入到Azure函数中,所以我无法发送模拟。它是被创建的。
  2. Azure 函数必须属于静态类,因此我不能使用虚拟或重写方法来绕过任何东西,然后模拟它们。
unit-testing service azure-functions moq
1个回答
0
投票

您可以像测试任何其他程序一样测试它。相比之下,考虑一个控制台应用程序。您通常不会测试

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

© www.soinside.com 2019 - 2024. All rights reserved.