在使用XUnit2进行测试时,可以同时使用AutoFixture和TheoryData来增强测试数据的泛化能力。其中TheoryData负责提供理论上的输入数据,而AutoFixture则可以根据输入类型自动生成随机数据,进一步增加数据泛化能力。
以下是示例代码:
public class Customer
{
public string Name { get; set; }
public int Age { get; set; }
}
public class CustomerService
{
public bool IsAdult(Customer customer)
{
return customer.Age >= 18;
}
}
public class CustomerTests
{
[Theory, AutoData]
public void IsAdult_Should_ReturnTrue_ForAdultCustomers(CustomerService service, Customer customer)
{
customer.Age = 18;
var result = service.IsAdult(customer);
Assert.True(result);
}
[Theory, AutoData]
public void IsAdult_Should_ReturnFalse_ForChildCustomers(CustomerService service, Customer customer)
{
customer.Age = 16;
var result = service.IsAdult(customer);
Assert.False(result);
}
[Theory]
[MemberData(nameof(CustomerData.GetData), MemberType = typeof(CustomerData))]
public void IsAdult_Should_ReturnTrue_ForAdultCustomers_UsingCustomData(CustomerService service, Customer customer)
{
var result = service.IsAdult(customer);
Assert.True(result);
}
}
public class CustomerData
{
public static IEnumerable
在示例中可以看到三个测试方法,第一个和第二个分别使用AutoData和TheoryData提供测试数据,分别测试了成年人和未成年人的判断。第三个测试方法使用自定义的数据源。
通过以上方法,可以大大提高测试覆盖率和测试的泛化能力。