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 类中的方法应用相同的逻辑。