是否可以在xUnit中自动生成多个测试用例?还是我注定要将每个可能的输入都指定为InlineData
?
在下面的示例中,在NCrunch或VS测试运行程序中,看起来像随机数已传入测试中。因此,每次运行测试时,尽管应该失败,但仍有可能通过。
在NUnit中,Range
属性实际上根据https://github.com/nunit/docs/wiki/Range-Attribute生成测试用例的多个排列
public bool RangeTest(int input)
{
if (input > 10)
{
return false;
}
return true;
}
[Theory]
[AutoMockData]
public void RangeTestCase([Range(0, 11)] int test)
{
var result = RangeTest(test);
Assert.True(result);
}
答案 0 :(得分:0)
以下是进行测试的一个很好的解释: https://andrewlock.net/creating-parameterised-tests-in-xunit-with-inlinedata-classdata-and-memberdata/ 在您的情况下,您必须创建一个专用的数据类,该类将返回测试的日期;
public class GetTestData : IEnumerable<Int32>
{
public IEnumerator<Int32> GetEnumerator()
{
yield return 1;
yield return 2;
yield return 3;
yield return 4;
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
}
该类的用法将是:
[Theory]
[ClassData(typeof(GetTestData ))]
public bool RangeTest(int input)
但是对于测试来说,仅测试边缘情况是一个好主意。您必须避免测试中的随机性。
答案 1 :(得分:0)
AutoFixture不提供开箱即用的功能。有一种方法可以通过创建自定义DataAttribute
来做到这一点,但是由于答案周围已经强调了这一点,因此您不应该这样做。听起来很矛盾,但使用AutoFixture时应避免随机性。您仍然应该使用多个实例检查边界值,例如InlineAuto[Moq]Data
属性,因此每次都可预测地失败/通过。
对于生成的值,仅在不引起随机性的情况下才应使用它们。例如,可能是: