2009-08-06 5 views
4

J'essaye de comprendre comment écrire le test combinatoire dans MbUnit v3. Tout le code d'échantillon sur le Web fait référence à MbUnit v2, ce qui signifie en utilisant 3 attributs:UsingFactories alternative dans MbUnit v3

  • CombinatorialTest
  • usine
  • UsingFactories

Dans MbUnit v3 il n'y a pas d'attribut de UsingFactories (et la sémantique de l'attribut Factory est très différente et l'attribut CombinatorialTest n'est plus nécessaire). Alors, comment puis-je savoir quelle méthode d'usine lie à quel paramètre dans la méthode de test unitaire particulière?

Merci.

Répondre

4

Je me souviens d'un article from Jeff Brown, le développeur principal de Gallio/MbUnit, qui parle des usines dynamiques et statiques dans MbUnit v3. Il y a un bel exemple qui décrit comment créer usines de test statiques et dynamiques. D'autre part, les usines de données de test sont plus faciles à créer et offrent une alternative intéressante aux tests pilotés par les données [Row], qui n'acceptent que les valeurs primitives en entrée (une limitation de C# pour les paramètres passés à un attribut)

Voici un exemple pour MbUnit v3. La fabrique de données est ici une propriété du banc de test, mais il peut s'agir d'une méthode ou d'un champ, qui peut être situé dans un type imbriqué ou dans un type externe. Ceci est en effet une caractéristique très souple :)

[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

Merci, mais cela ne répond pas à la question de CombinatorialTest avec UsingFactories. Comment peut-on produire une multiplication cartésienne de {new Foo (123), new Foo (456), nouveau Foo (789)} x {"Hello", "Big", "World"} x {Color.Blue, Color.Red , Color.Green} dans MbUnit v3 ?. En v2 c'est facile - chaque paramètre de MyTestMethod est attribué avec UsingFactories. Dans MbUnit v3, il y a l'attribut Column, mais les valeurs doivent être connues au moment de la compilation, contrairement à UsingFactories. – mark

+0

Merci, j'ai trouvé cela très utile même si cela ne répond pas à la question. – dkantowitz

4

Je l'ai découvert, avec l'aide de Jeff, que l'attribut Factory peut simplement être utilisé au lieu de UsingFactories, comme ceci:

public static IEnumerable<int> XFactory() 
{ 
... 
} 

public static IEnumerable<string> YFactory() 
{ 
... 
} 

[Test] 
public void ATestMethod([Factory("XFactory")] int x, [Factory("YFactory")] string y) 
{ 
... 
} 

Le test ATestMethod sera exécuté sur la multiplication cartésienne des valeurs générées par XFactory et ceux générés par YFactory.