Je suis assez nouveau dans les tests unitaires en C # et j'apprends à utiliser Moq. Voici la classe que j'essaie de tester.
class MyClass
{
SomeClass someClass;
public MyClass(SomeClass someClass)
{
this.someClass = someClass;
}
public void MyMethod(string method)
{
method = "test"
someClass.DoSomething(method);
}
}
class Someclass
{
public DoSomething(string method)
{
// do something...
}
}
Voici mon TestClass:
class MyClassTest
{
[TestMethod()]
public void MyMethodTest()
{
string action="test";
Mock<SomeClass> mockSomeClass = new Mock<SomeClass>();
mockSomeClass.SetUp(a => a.DoSomething(action));
MyClass myClass = new MyClass(mockSomeClass.Object);
myClass.MyMethod(action);
mockSomeClass.Verify(v => v.DoSomething(It.IsAny<string>()));
}
}
J'obtiens l'exception suivante:
Expected invocation on the mock at least once, but was never performed
No setups configured.
No invocations performed..
Je veux juste vérifier si la méthode "MyMethod" est appelée ou non. Est-ce que je manque quelque chose?
SomeClass
n'a pas de définition pourMyMethod(string)
, ce qui semble ne pas l'être.Réponses:
Vous vérifiez la mauvaise méthode. Moq nécessite que vous configuriez (puis, éventuellement, vérifiez) la méthode dans la classe de dépendance.
Vous devriez faire quelque chose de plus comme ceci:
En d'autres termes, vous vérifiez cet appel
MyClass#MyMethod
, votre classe appellera certainementSomeClass#DoSomething
une fois dans ce processus. Notez que vous n'avez pas besoin de l'Times
argument; J'étais juste en train de démontrer sa valeur.la source
mockSomeClass.VerifyAll();
le même résultat et ne serait-il pas plus SEC?Mock
par rapport àNSubstitute
est que si vous essayez de vérifier également les paramètres et que la vérification échoue, cela montre simplement quelles invocations ont été effectuées, mais ne montre pas exactement ce qui était attendu si vous avez utilisé des variables dans l'expression de vérification - il affichera simplement la variable nom, pas sa valeur, vous devrez donc déboguer pour vérifier la valeur exacte de cette variable. NSubstitute affichera simplement les valeurs des deux et même là où elles étaient différentes.