2010-11-29 6 views
7

Je suis totalement nouveau pour Moq et je viens de suivre les exemples décrits dans Pro asp.net framework. Dans le livre, une partie de la crud est placée dans le contrôleur, comme obtenir le client par l'identification - probablement pour des raisons de concision. J'ai décidé de placer ce type de fonctionnalité dans le référentiel et de l'appeler simplement dans le contrôleur comme si "customerRepository.GetCustomerByID (id);" Quelle est la meilleure façon de tester quelque chose comme ça? J'ai créé le test unitaire suivant, qui pour une raison quelconque renvoie un client nul.Référentiel de tests unitaires avec Moq

List<Customer> customer = new List<Customer>(); 

customer.Add(new Customer { CustomerId = 1, FirstName = "test", LastName = "wods", Sex = true }); 
mockRepos = new Moq.Mock<ICustomerRepository>(); 
mockRepos.Setup(x => x.Customers).Returns(customer.AsQueryable()); 

CustomersController controller = new CustomersController(mockRepos.Object); 

//Act 
ViewResult results = controller.Edit(1); 

var custRendered = (Customer)results.ViewData.Model; 
Assert.AreEqual(2, custRendered.CustomerId); 
Assert.AreEqual("test", custRendered.FirstName); 

Et le contrôleur

public ViewResult Edit(int id) 
{ 
    Customer customer = customerRepository.GetCustomerByID(id);   

    return View(customer); //this just returns null?? 
} 

J'imagine que je suis être très stupide, mais toute aide serait appréciée uber.

Répondre

9

vous devez définir votre maquette pour attendre un appel à GetCustomerById plutôt que la propriété Customers. Quelque chose comme ceci:

mockRepos.Setup(x => x.GetCustomerById(1)).Returns(customer[0]); 
+0

Parfaitement merci. – hoakey