2009-07-28 6 views
1

Dans le code suivant, Test1 réussit mais Test2 échoue:Comportement étrange dans la « Vérifier » méthode Moq

protected Mock<IMyInterface> MyMock { get; set; } 

[SetUp] 
public virtual void Initialize() 
{ 
    MyMock = new Mock<IMyInterface>(); 
} 

[Test] 
void Test1() 
{ 
    // ... code that causes IMyIntervace.myMethod to be called once 

    MyMock.Verify(x=> x.myMethod(), Times.Once()); 
} 

[Test] 
void Test2() 
{ 
    MyMock.Verify(x=> x.myMethod(), Times.Once()); 
} 

Ce comportement est en fait tout à fait utile, mais je ne peux pas comprendre pourquoi ça fonctionne comme ça. Il semble que Test2 devrait aussi réussir!

La seule idée que j'ai est qu'en quelque sorte Verify est assez intelligent pour savoir que "myMethod" a été appelé à partir d'un cas de test différent et donc "ne compte pas"? BTW, même si je supprime l'appel de Verify dans Test1, la même chose se produit (Test2 échoue).

Répondre

6

Votre méthode SetUp s'exécute avant chaque test, c'est donc recréer votre simulation avant Test2.

Dans Test2, vous n'avez rien fait, donc votre vérification échoue. Vous essayez de vérifier si MyMethod a été appelé - et ce n'est pas le cas. Alors, échoue.

Si vous essayez de créer uniquement votre maquette une fois, vous devez utiliser [TestFixtureSetUp].

+1

+1. Je suggère de ne pas créer un simulacre de vérification dans TestFixtureSetUp. – TrueWill