2009-07-04 6 views
3

Comment tester qu'un IEnumerable a tous les éléments de la classe SomeClass dans MBunit?Comment testez-vous qu'un IEnumerable <SomeClass> a tous les éléments de la classe SomeClass dans MBunit?

J'ai déjà utilisé Visual Studio Unit Test Framework et trouvé CollectionAssert.AllAreInstancesOfType ou quelque chose pour vérifier cela.

Mais comment le faire dans MBunit?

+1

Voulez-vous dire "type SomeClass ou dérivé"? Parce qu'un IEnumerable ne peut pas avoir une SomeOtherClass dedans à moins que SomeOtherClass soit dérivé de SomeClass. –

Répondre

0

Je ne vois rien dans le MBUnit CollectionAssert classe qui pourrait vous aider ici

Vous pouvez facilement écrire votre propre bien (non testé).

public class MyCollectionAssert 
{ 
    public void CollectionAssert(IEnumerable source, Predicate<object> assertion) 
    { 
    foreach(var item in source) 
    { 
     Assert.IsTrue(assertion(item)); 
    } 
    } 

    public void AllAreInstancesOfType(IEnumerable source, Type type) 
    { 
    return CollectionAssert(source, o => o.GetType() == type); 
    } 
} 

Je suppose que vous voulez dire en fait IEnumerable et non IEnumerable<SomeClass> que le compilateur applique la sécurité de type. Pour utiliser cette méthode d'extension appel:

MyCollectionAssert.AllAreInstancesOfType(myList, typeof(SomeClass)); 
1

Jeff Brown, le développeur principal du projet Gallio a ouvert une issue pour cette demande. Nous allons implémenter quelques assertions dédiées: Assert.ForAll et Assert.Exists. Ils devraient être disponibles dans la prochaine version de Gallio/MbUnit (v3.1) mais vous pourrez les utiliser plus tôt en téléchargeant la version quotidienne dans quelques jours (Restez à l'écoute).

Edit: A partir de Gallio/MbUnit v3.1.213, vous pouvez utiliser Assert.ForAll<T>(IEnumerable<T>, Predicate<T>).

[Test] 
public void AllMyObjectsShouldBeStrings() 
{ 
    var list = GetThemAll(); 
    Assert.ForAll(list, x => x.GetType() == typeof(string)); 
} 
Questions connexes