2010-01-21 4 views
2

Je viens de commencer à explorer BDD pour mon projet actuel. J'utilise moq avec mspec pour obtenir de bonnes sorties de test. Cependant, je ne trouve pas assez d'exemples de ce que j'essaie de faire, peut-être que j'utilise la mauvaise approche ou peut-être ne comprends pas assez la syntaxe, s'il vous plaît aviser.Comment comparer deux listes d'objets en utilisant moq avec mspec (style BDD)

Le problème est que j'essaie de vérifier si une propriété a été définie dans une classe. Cette propriété est une liste d'objets et je veux vérifier que chaque objet a les mêmes valeurs que l'objet attendu.

Donc, étant donné les locaux initiaux

public class Data 
{ 
    int a;  
} 

public class DataViewer : IDataViewer 
{ 
    public List<Data> dataList {get;set;} 
} 

public interface IDataViewer 
{ 
    public List<Data> dataList {get;set;} 
} 

J'utilise MSpec et moq effectuer les opérations suivantes

class when_refreshing_data_list : Context 
{ 
    Because .... =() => 
    { 
     .... // process the datalist 
    } 

    ThenIt should_set_the_data_list =() => 
    { 
     List<DataList> expectedDataList = new List<DataList>(); 
     expectedDataList.add() // add some expected values to the datalist 
     ... 

     // problem is here in comparing two List<DataList> 
     _mockDataViewer.VerifySet(f => f.dataList = expectedDataList) 
    } 
} 

public abstract class Context 
{ 
    Establish context =() => 
    { 
     _mockDataViewer = new Mock<IDataViewer>(); 
    } 
} 

Comment pourrais-je effectuer cette comparaison? Puis-je utiliser le remplacement de l'opérateur? Si oui, comment? J'ai essayé de mettre un corps d'expression sur le côté droit du lambda seulement pour être dit que "une expression lambda avec un corps d'instruction ne peut pas être convertie en arbre d'expression".

Toute aide appréciée :)

Répondre

1

Avez-vous surchargé la méthode equals sur l'objet de données?

public override bool Equals(object obj) 
{ 
    if (((Data)obj).a.Equals(this.a)) 
     return true; 

    return false; 
} 

Ceci devrait être appelé automatiquement lorsque vous comparez la liste de données à sa liste de données attendue.

+0

génial! Cela a fonctionné! – Joe

Questions connexes