我使用的是AutoFixture AutoMoq,它极大地简化了类中使用的所有接口的模拟,并对其进行初始化。
虽然我注意到构造函数代码已被部分覆盖,但我们是否可以修改AutoMoqDataAttribute,以使构造函数ArgumentNullException也能被覆盖?

public class ServiceTest
{
[Theory, AutoMoqData]
public async Task Do_Test_For_DoMethod(Service sut)
{
await sut.DoMethod();
}
}AutoMoqData属性类,
public class AutoMoqDataAttribute : AutoDataAttribute
{
public AutoMoqDataAttribute()
: base(() => new Fixture().Customize(new AutoMoqCustomization()))
{
}
}服务等级代码,
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();
}
}发布于 2022-01-26 07:47:15
AutoDataAttribute没有责任知道如何覆盖您的代码。开发人员有责任表达意图并明确地涵盖该场景。
在您的例子中,未发现的分支是空守卫。幸运的是,AutoFixture为此提供了一个库,AutoFixture.Idioms。
这个库提供了一些惯用的断言,这些断言封装了大多数基本的测试场景,比如null守护程序、属性设置器、相等成员等等。
使用这个库,您可以编写如下所示的测试。
[Theory, AutoMockData]
void CheckGuards(GuardClauseAssertion assertion)
{
assertion.Verify(typeof(Service));
}这应该涵盖所有构造函数的所有参数,好的部分是它使用您的自定义,因此它在尝试实例化对象时将生成有效的数据。
https://stackoverflow.com/questions/70849199
复制相似问题