首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何模拟HttpConfiguration?

如何模拟HttpConfiguration?
EN

Stack Overflow用户
提问于 2020-04-07 05:23:23
回答 1查看 137关注 0票数 0

我必须在我的单元测试中测试控制器。此控制器需要在构造函数中使用"HttpConfiguration“。我想用Moq来模拟一个对象,但是我不知道怎么做。“HttpConfiguration”既没有接口也没有虚方法。

被测试的方法包含这样一个调用Configuration.Services.GetApiExplorer().ApiDescriptions

如何在模拟中设置"ApiDescriptions“?

EN

回答 1

Stack Overflow用户

发布于 2020-04-07 08:26:52

HttpConfiguration没有实现任何接口,并且由于您不能使用Moq模拟类的实际实现,因此您可能希望围绕它创建一个自定义包装器,比如说:

代码语言:javascript
复制
public interface IHttpConfiguration
{
     bool IsPositive(int num);
}

然后让你的HttpConfiguration类实现它:

代码语言:javascript
复制
public class HttpConfiguration: IHttpConfiguration
{
     public bool IsPositive(int num)
     {
        return num > 0;
     }
}

在您的控制器中:

代码语言:javascript
复制
public class MyController: Controller
{
     private readonly IHttpConfiguration _httpConfiguration;

     public MyController(IHttpConfiguration httpConfiguration)
     {
        _httpConfiguration = httpConfiguration;
     }

     //Your controller methods here
}

假设你使用的是.NET内核,在你的Startup.cs中:

代码语言:javascript
复制
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
    }
}

在您的单元测试类中:

代码语言:javascript
复制
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类中的方法应用相同的逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61069200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档