在MbUnit v3中使用Factories替代方案

时间:2009-08-06 09:43:46

标签: mbunit

我试图弄清楚如何在MbUnit v3中编写组合测试。 Web上的所有示例代码都引用了MbUnit v2,这意味着使用3个属性:

  • CombinatorialTest
  • UsingFactories

在MbUnit v3中没有UsingFactories属性(并且Factory属性语义差异很大,不再需要CombinatorialTest属性)。那么如何判断哪个工厂方法绑定到特定单元测试方法中的哪个参数?

感谢。

3 个答案:

答案 0 :(得分:4)

我记得article from Jeff BrownGallio/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对此的确认。