【问题标题】:UsingFactories alternative in MbUnit v3MbUnit v3 中的 UsingFactories 替代方案
【发布时间】:2009-08-06 09:43:46
【问题描述】:

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

  • 组合测试
  • 工厂
  • 使用工厂

在 MbUnit v3 中没有 UsingFactories 属性(并且 Factory 属性语义大不相同,不再需要 CombinatorialTest 属性)。那么如何才能知道哪个工厂方法绑定到特定单元测试方法中的哪个参数呢?

谢谢。

【问题讨论】:

    标签: mbunit


    【解决方案1】:

    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】:

      我记得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...   
         }
      }
      

      【讨论】:

      • 谢谢,但这并不能回答 CombinatorialTest 与 UsingFactories 的问题。如何产生 {new Foo(123),new Foo(456),new Foo(789)}x{"Hello","Big","World"}x{Color.Blue,Color.Red ,Color.Green} 在 MbUnit v3?.在 v2 中,这很容易 - MyTestMethod 的每个参数都由 UsingFactories 赋予属性。在 MbUnit v3 中有 Column 属性,但它要求在编译时知道值,而 UsingFactories 则不需要。
      • 谢谢,我发现这很有帮助,即使它没有回答问题。
      【解决方案3】:

      我在MbUnit's tests 中看不到任何类似于[UsingFactories] 的内容,但您可以使用[Factory] + this combinatorics library 来获得相同的结果。

      尝试在MbUnit users group 上寻求确认。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-04
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        • 2015-06-13
        • 2015-03-03
        • 2015-09-25
        相关资源
        最近更新 更多