我试图弄清楚如何在MbUnit v3中编写组合测试。 Web上的所有示例代码都引用了MbUnit v2,这意味着使用3个属性:
在MbUnit v3中没有UsingFactories属性(并且Factory属性语义差异很大,不再需要CombinatorialTest属性)。那么如何判断哪个工厂方法绑定到特定单元测试方法中的哪个参数?
感谢。
答案 0 :(得分:4)
我记得article from Jeff Brown是Gallio/MbUnit的首席开发人员,它讨论了MbUnit v3中的动态和静态工厂。有一个很好的例子描述了如何创建静态和动态测试工厂。
另一方面,测试数据工厂更容易创建,并提供了基于[Row]
的数据驱动测试的有趣替代方案,该测试仅接受原始值作为输入(参数的C#限制)传递给属性)
以下是MbUnit v3的示例。数据工厂在这里是测试夹具的属性,但它可以是方法或字段,可以位于嵌套类型或外部类型中。这确实是一个非常灵活的功能:)
[TestFixture]
public class MyTestFixture
{
private IEnumerable<object[]> ProvideTestData
{
get
{
yield return new object[] { new Foo(123), "Hello", Color.Blue};
yield return new object[] { new Foo(456), "Big", Color.Red};
yield return new object[] { new Foo(789), "World", Color.Green};
}
}
[Test, Factory("ProvideTestData")]
public void MyTestMethod(Foo foo, string text, Color color)
{
// Test logic here...
}
}
答案 1 :(得分:4)
我发现,在Jeff的帮助下,Factory
属性可以简单地用于代替UsingFactories
,如下所示:
public static IEnumerable<int> XFactory()
{
...
}
public static IEnumerable<string> YFactory()
{
...
}
[Test]
public void ATestMethod([Factory("XFactory")] int x, [Factory("YFactory")] string y)
{
...
}
测试ATestMethod
将在XFactory
生成的值与YFactory
生成的值的笛卡尔乘法运行。
答案 2 :(得分:0)
我在MbUnit's tests中看不到与[UsingFactories]
类似的内容,但您可以使用[Factory]
+ this combinatorics library来获得相同的结果。
尝试询问MbUnit users group对此的确认。