2009-03-30 4 views
1

J'ai un type de données de collection personnalisé. Ces données sont triées par trois propriétés dans leur ordre, par ex. Prenons l'exemple suivant:MbUnit: Tester une collection ordonnée personnalisée

class Data 
{ 
    public int PropertyA() { get; set; } 
    public int PropertyB() { get; set; } 
    public int PropertyC() { get; set; } 
} 

La collection doit maintenir l'ordre de A, B, C, par exemple:

[A, B, C] 
[1, 2, 5] 
[1, 3, 3] 
[1, 3, 4] 
[1, 4, 1] 
[2, 1, 2] 
[3, 3, 1] 
[3, 4, 2] 

Je voudrais écrire des tests pour faire en sorte que cet ordre est maintenu dans la collecte via les opérations habituelles d'ajout et de suppression de suspects. J'utilise Gallio et MbUnit 3, et je pense qu'il doit y avoir un moyen facile de le faire avec leurs attributs, je ne comprends pas tout de suite. Des idées?

Répondre

1

MbUnit v3 a une nouvelle méthode Assert.Sorted utile. Vous avez juste besoin de passer l'instance d'énumération pour évaluer. Si les objets énumérés implémente IEquatable, tout est automatique.

[Test] 
public void MySimpleTest 
{ 
    var array = new int[] { 1, 5, 9, 12, 26 }; 
    Assert.Sorted(array); 
} 

Sinon, vous avez toujours la possibilité de spécifier un critère de comparaison personnalisé (avec le nouveau par exemple structural equality comparer, à portée de main).

[Test] 
public void MyComplexTest 
{ 
    var array = new Foo[] { new Foo(123), new Foo(456), new Foo(789) }; 
    Assert.Sorted(array, new StructuralEqualityComparer<Foo> 
    { 
     { x => x.Value } 
    }); 
} 

Jetez un oeil à la Gallio/MbUnit API doc reference pour plus de détails.

0

Dans MbUnit v2, vous pouvez utiliser CollectionOrderFixture .. ne peut pas trouver ce qu'il MbUnit v3 si

+0

Malheureusement, il semble que ce soit parti dans MbUnit v3. Merci pour l'aide, je vais vous récompenser avec la bonne réponse! – grover

+0

Je l'implémenterais en v3 en utilisant les nouveaux ContractVerifiers (http://code.google.com/p/mb-unit/source/browse/trunk/v3/src/MbUnit/Samples/MbUnit.Samples/ContractVerifiers/Collection/ SampleCollection.Test.cs) –

+0

Essayez de demander au groupe de développeurs (http://groups.google.com/group/gallio-dev) peut-être qu'il existe un remplacement dans v3. –

1

Yann Trevin travaille sur un "CollectionContract" pour MbUnit v3. Je ne pense pas qu'il puisse gérer les collections commandées pour le moment, mais je suis sûr qu'il serait intéressé d'ajouter cette capacité à un délégué de comparaison approprié pour décrire l'invariant de la commande.

Vous trouverez un exemple de ceci dans le montage "SampleCollectionTest" du projet MbUnit.Samples dans MbUnit v3.0.6.

Je recommande que vous publiez votre idée à la liste de diffusion de mbunitdev où il va le voir: http://groups.google.com/group/mbunitdev

+0

Merci, je posterai ma demande plus tard. Peut-être que le groupe a aussi une meilleure idée. – grover