首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoFixture AutoMoq部分覆盖类构造函数。

AutoFixture AutoMoq部分覆盖类构造函数。
EN

Stack Overflow用户
提问于 2022-01-25 13:10:37
回答 1查看 197关注 0票数 0

我使用的是AutoFixture AutoMoq,它极大地简化了类中使用的所有接口的模拟,并对其进行初始化。

虽然我注意到构造函数代码已被部分覆盖,但我们是否可以修改AutoMoqDataAttribute,以使构造函数ArgumentNullException也能被覆盖?

代码语言:javascript
复制
public class ServiceTest
{
    [Theory, AutoMoqData]
    public async Task Do_Test_For_DoMethod(Service sut)
    {
        await sut.DoMethod();
    }
}

AutoMoqData属性类,

代码语言:javascript
复制
public class AutoMoqDataAttribute : AutoDataAttribute
{
    public AutoMoqDataAttribute()
        : base(() => new Fixture().Customize(new AutoMoqCustomization()))
    {

    }
}

服务等级代码,

代码语言:javascript
复制
 public class Service
{
    private readonly IServiceClient _serviceClient;
    private readonly ILogger<Service> _logger;

    public Service(IServiceClient serviceClient, ILogger<Service> logger)
    {
        _serviceClient = serviceClient ?? throw new ArgumentNullException(nameof(serviceClient));
        _logger = logger ?? throw new ArgumentNullException(nameof(logger));
    }


    public async Task DoMethod()
    {

        await _serviceClient.Do();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-26 07:47:15

AutoDataAttribute没有责任知道如何覆盖您的代码。开发人员有责任表达意图并明确地涵盖该场景。

在您的例子中,未发现的分支是空守卫。幸运的是,AutoFixture为此提供了一个库,AutoFixture.Idioms

这个库提供了一些惯用的断言,这些断言封装了大多数基本的测试场景,比如null守护程序、属性设置器、相等成员等等。

使用这个库,您可以编写如下所示的测试。

代码语言:javascript
复制
[Theory, AutoMockData]
void CheckGuards(GuardClauseAssertion assertion)
{
   assertion.Verify(typeof(Service));
}

这应该涵盖所有构造函数的所有参数,好的部分是它使用您的自定义,因此它在尝试实例化对象时将生成有效的数据。

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

https://stackoverflow.com/questions/70849199

复制
相关文章

相似问题

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