2013-08-06 6 views
1

Salut, il est possible de moq quelque chose comme ça. J'utilise le pattern MVC et je suis en train de tester mon Controller Layer. J'ai déjà testé la méthode getListForId dans ma couche Service afin que je puisse croire qu'elle retournera la bonne valeur.Pouvez-vous Moq un Claus lorsque vous utilisez Nunit

public List<object> getListForID(int id) 

et je l'utilise comme celui-ci

if(true) 
{ 
    getListForID(1).Where(a => a.Id == objectB.Id) 
} 
else 
{ 
    getListForID(1) 
} 

Le test du code chaque chemin serait le même même quand il y a un où dans le vrai chemin.

Est-il possible de vérifier que la méthode a été appelée avec la clause where? Et y a-t-il une valeur à cela?

+0

Qu'est-ce que vous essayez de faire? L'instruction 'where' vous donnera une liste partielle de tout' getListForID' renvoyé. – Artless

+2

Je dirais que cela ne sert à rien. Vous devriez tester le résultat, pas la façon dont quelque chose est implémenté. –

+0

Je me demandais juste s'il y avait un moyen de vérifier si l'endroit est appelé. Je vais éditer ma question pour fournir un exemple plus clair. –

Répondre

3

Vous devez tester un comportement, pas l'implémentation. Si vous avez déjà testé la couche de service, vous devez simuler la couche de service pour vos tests de contrôleur et getById retourner une liste d'objets avec des valeurs possibles, puis tester que cette liste a été filtrée correctement:

(le pseudo code suit)

// arrange 
var serviceOutput = new List<MyEntity> 
{ 
    new MyEntity{Id = 1}, 
    new MyEntity{Id = 2} 
} 
var mockService = new Mock<IMyService>(); 
mockService.Setup(s=>s.GetById(1)).Returns(serviceOutput); 

var lookupObject = new MyEntity{Id = 1}; 

var testController = new MyController(mockService.Object); 

// act 
var result = controller.FindSimilar(lookupObject); 

// assert 
result.Should().Have.Count().EqualTo(1); 
result[0].Should().Be.SameInstanceAs(serviceOutput[0]); 
Questions connexes