Jestem całkiem nowy w testowaniu jednostkowym w C # i uczę się używać Moq. Poniżej znajduje się klasa, którą próbuję przetestować.
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...
}
}
Poniżej znajduje się moja klasa 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>()));
}
}
Otrzymuję następujący wyjątek:
Expected invocation on the mock at least once, but was never performed
No setups configured.
No invocations performed..
Chcę tylko sprawdzić, czy metoda „MyMethod” jest wywoływana, czy nie. Czy coś mi brakuje?
SomeClass
nie ma definicji, dlaMyMethod(string)
której wygląda na to, że jej nie ma.Odpowiedzi:
Sprawdzasz niewłaściwą metodę. Moq wymaga skonfigurowania (a następnie opcjonalnie weryfikacji) metody w klasie zależności.
Powinieneś zrobić coś bardziej podobnego:
Innymi słowy, weryfikujesz to połączenie
MyClass#MyMethod
, twoja klasa na pewno zadzwoniSomeClass#DoSomething
raz w tym procesie. Zauważ, że nie potrzebujeszTimes
argumentu; Właśnie pokazywałem jego wartość.źródło
mockSomeClass.VerifyAll();
osiągnąłby tego samego rezultatu i nie byłby bardziej SUCHY?Mock
porównaniu doNSubstitute
jest to, że jeśli próbujesz zweryfikować również parametry i weryfikacja się nie powiedzie, pokazuje tylko, jakie wywołania zostały wykonane, ale nie pokazuje, czego dokładnie oczekiwano, jeśli użyłeś zmiennych w wyrażeniu weryfikacyjnym - pokaże tylko zmienną nazwa, a nie wartość, więc będziesz musiał debugować, aby sprawdzić, jaką dokładnie wartość ma ta zmienna. NSubstitute po prostu pokaże wartości obu, a nawet tam, gdzie było inaczej.