c# - 如何模拟 HttpConfiguration?
问题描述
我必须在单元测试中测试控制器。此控制器在构造函数中需要“HttpConfiguration”。我想用Moq来模拟一个对象,但是我不知道怎么做。”HttpConfiguration“既没有接口也没有虚方法。
被测方法包含这样一个调用
Configuration.Services.GetApiExplorer().ApiDescriptions
我该怎么做才能在模拟中设置“ApiDescriptions”?
解决方案
HttpConfiguration 没有实现任何接口,因为你不能用 Moq 模拟类的真实实现,你可能想围绕它创建一个自定义包装器,让我们这样说:
public interface IHttpConfiguration
{
bool IsPositive(int num);
}
然后让你的HttpConfiguration
类实现它:
public class HttpConfiguration: IHttpConfiguration
{
public bool IsPositive(int num)
{
return num > 0;
}
}
在您的控制器中:
public class MyController: Controller
{
private readonly IHttpConfiguration _httpConfiguration;
public MyController(IHttpConfiguration httpConfiguration)
{
_httpConfiguration = httpConfiguration;
}
//Your controller methods here
}
假设您在 Startup.cs 中使用 .NET Core:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IHttpConfiguration, HttpConfiguration>();
//other logic here
}
}
在您的单元测试类中:
public class MyControllerTest
{
private Mock<IHttpConfiguration> _mockHttpConfiguration;
private MyController _myController;
[TestInitialize]
public void TestInitialize()
{
_mockHttpConfiguration = new Mock<IHttpConfiguration>();
_myController = new MyController(_mockHttpConfiguration.Object);
}
[TestMethod]
public void TestMock()
{
//mock methods you need and assert
_mockHttpConfiguration.Setup(x=>x.IsPositive(2)).Returns(false);
}
}
我IsPositive()
仅用于演示目的。您必须对要模拟的 HttpConfiguration 类中的方法应用相同的逻辑。
推荐阅读
- git - 如何指定拉动深度(在 TortoiseGit 中)?
- embedded-linux - 根据变量值排除 yocto 元层
- bash - 在 Git Fetch 和缓存中传递凭据
- tensorflow - 如何访问 4 位 QAT 模型的权重
- python - How to mak a transaction method in a BankAccount class?
- spring-boot - org.springframework.orm.jpa.JpaSystemException:无法初始化代理 [Order#orderdate] - 没有会话;
- javascript - useEffect 和文档标题更新
- python - 使用 AWS Lambda 将存储在 S3 Bucket 中的 JSON 文件转换为 CSV
- python - AttributeError:模块“speedtest”没有属性“Speedtest”test_get_server 未定义
- android - Android CI同一个项目build test和prod,Application ID不同,为了像独立应用一样安装在同一个设备上