2017-09-27 5 views
-2

J'ai besoin d'aide pour tester une méthode vide. Quelqu'un peut-il expliquer comment les méthodes vides fonctionnent avec les tests.moq test méthode vide pour supprimer

mes services ressemblent à ceci:

public void DeleteUser(int userId) 
{ 
    var user = _dbcontext.Users.FirstOrDefault(usr => usr.Id == userId); 
    { 
     if (user != null) 
     { 
      _dbcontext.Users.Remove(user); 
     } 

    _dbcontext.SaveChanges(); 
    } 
} 




[TestClass] 
public class UnitTest 
{ 
    [TestMethod] 
    public void DeleteUser() 
    { 
     mockContext = new Mock<UserService>(); 
     mockContext.SetUp(x => x.Users(It.IsAny<int>()).Returns(userid) 
    } 
} 
+0

où est le vide méthode que vous voulez tester? –

+0

Faire des tests unitaires sur une base de données réelle n'est pas une bonne option, même si vous n'utilisez pas l'IoC, Moq n'est pas nécessaire ici et cela ne fonctionnera pas si votre classe n'est pas virtuelle. En plus de cela, repensez ce que vous voulez vraiment réaliser avec ce test. – Erexo

+0

Voir les questions connexes sur le côté. Cela peut être une copie de l'un d'entre eux. –

Répondre

2

méthodes Void peuvent faire deux choses importantes:

  1. Modifier l'état
  2. Appel d'autres méthodes

Depuis votre méthode faire pas éditer l'état directement ce que vous voulez tester est que Remove et SaveChanges a été appelé si l'utilisation r est trouvé et n'appelle rien si ce n'est pas le cas. Mock possède une méthode de vérification spéciale que vous pouvez utiliser dans les deux cas. Voici par exemple comment vérifier que SaveChanges a été appelé (que vous pouvez mettre à l'intérieur si par la voie):

mockContext 
    .Verify(c => c.SaveChanges(), Times.Once()); 

Or (le cas où l'utilisateur n'existe pas):

mockContext 
    .Verify(c => c.SaveChanges(), Times.Never());