我想弄清楚如何在 MbUnit v3 中编写组合测试。网络上的所有示例代码都引用了 MbUnit v2,这意味着使用 3 个属性:
- 组合测试
- 工厂
- 使用工厂
在 MbUnit v3 中没有 UsingFactories 属性(并且 Factory 属性语义大不相同,不再需要 CombinatorialTest 属性)。那么如何才能知道哪个工厂方法绑定到特定单元测试方法中的哪个参数呢?
谢谢。
我想弄清楚如何在 MbUnit v3 中编写组合测试。网络上的所有示例代码都引用了 MbUnit v2,这意味着使用 3 个属性:
在 MbUnit v3 中没有 UsingFactories 属性(并且 Factory 属性语义大不相同,不再需要 CombinatorialTest 属性)。那么如何才能知道哪个工厂方法绑定到特定单元测试方法中的哪个参数呢?
谢谢。
在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
。
我记得来自Gallio/MbUnit的首席开发人员Jeff Brown 的一篇文章,其中谈到了 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...
}
}
I don't see anything similar to [UsingFactories]
in MbUnit's tests, but you could use [Factory]
+ this combinatorics library to achieve the same result.
Try asking on the MbUnit users group for a confirmation on this.