Verifica una chiamata al metodo usando Moq

Sono abbastanza nuovo ai test unitari in C # e sto imparando a usare Moq. Di seguito è la class che sto cercando di testare.

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... } } 

Di seguito è riportato il mio TestClass:

 class MyClassTest { [TestMethod()] public void MyMethodTest() { string action="test"; Mock mockSomeClass = new Mock(); mockSomeClass.SetUp(a => a.DoSomething(action)); MyClass myClass = new MyClass(mockSomeClass.Object); myClass.MyMethod(action); mockSomeClass.Verify(v => v.DoSomething(It.IsAny())); } } 

Ottengo la seguente eccezione:

 Expected invocation on the mock at least once, but was never performsd No setups configured. No invocations performsd.. 

Voglio solo verificare se il metodo “MyMethod” viene chiamato o meno. Mi sto perdendo qualcosa?

Grazie in anticipo!

Stai controllando il metodo sbagliato. Moq richiede che tu imposti (e poi opzionalmente Verifica) il metodo nella class di dipendenza.

Dovresti fare qualcosa di più simile a questo:

 class MyClassTest { [TestMethod] public void MyMethodTest() { string action = "test"; Mock mockSomeClass = new Mock(); mockSomeClass.Setup(mock => mock.DoSomething()); MyClass myClass = new MyClass(mockSomeClass.Object); myClass.MyMethod(action); // Explicitly verify each expectation... mockSomeClass.Verify(mock => mock.DoSomething(), Times.Once()); // ...or verify everything. // mockSomeClass.VerifyAll(); } } 

In altre parole, stai verificando che chiamando MyClass#MyMethod , la tua class chiamerà sicuramente SomeClass#DoSomething una volta in quel processo. Si noti che non è necessario l’argomento Times ; Stavo solo dimostrando il suo valore.