Использование альтернативы фабрики в MbUnit v3 - PullRequest
4 голосов
/ 06 августа 2009

Я пытаюсь понять, как написать комбинаторный тест в MbUnit v3. Весь пример кода в Интернете относится к MbUnit v2, что означает использование 3 атрибутов:

  • CombinatorialTest
  • Завод
  • UsingFactories

В MbUnit v3 отсутствует атрибут UsingFactories (семантика атрибута Factory сильно отличается, а атрибут CombinatorialTest больше не требуется) Так как же узнать, какой метод фабрики привязан к какому параметру в конкретном методе модульного теста?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 24 августа 2009

Я выяснил, с помощью Джеффа , что атрибут 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.

4 голосов
/ 06 августа 2009

Я помню статью от Джеффа Брауна , ведущего разработчика 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...   
   }
}
0 голосов
/ 08 августа 2009

Я не вижу ничего похожего на [UsingFactories] в тестах MbUnit , но вы можете использовать [Factory] + эту библиотеку комбинаторик для достижения того же результата.

Попробуйте запросить подтверждение у группы пользователей MbUnit .

...