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
}
Предполагая, что вы используете. NET Core, в вашем Startup.cs:
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()
только для демонстрационных целей. Вы должны применить ту же логику c для методов в классе HttpConfiguration, которые вы хотите смоделировать.