chcę drwić tylko metodę następnej klasy GetValue
korzystając Min:Częściowa szyderczy klasy z Min
public class MyClass
{
public virtual void MyMethod()
{
int value = GetValue();
Console.WriteLine("ORIGINAL MyMethod: " + value);
}
internal virtual int GetValue()
{
Console.WriteLine("ORIGINAL GetValue");
return 10;
}
}
już czytać trochę jak to powinno działać z Min. Rozwiązaniem, które znalazłem online, jest użycie właściwości CallBase
, ale to nie działa dla mnie.
To moja próba:
[Test]
public void TestMyClass()
{
var my = new Mock<MyClass> { CallBase = true };
my.Setup(mock => mock.GetValue()).Callback(() => Console.WriteLine("MOCKED GetValue")).Returns(999);
my.Object.MyMethod();
my.VerifyAll();
}
Spodziewam się, że Moq wykorzystuje istniejące wdrożenia MyMethod
i wywołuje szydzili metodę, w wyniku następujące dane wyjściowe:
ORIGINAL MyMethod: 999
MOCKED GetValue
ale to co ja Uzyskaj:
ORIGINAL GetValue
ORIGINAL MyMethod: 10
, a następnie
Moq.MockVerificationException : The following setups were not matched: MyClass mock => mock.GetValue()
Mam wrażenie, że zupełnie coś źle zrozumiałem. Czego tu mi brakuje? Każda pomoc będzie mile widziane
możliwe duplikat [Kiedy szydząc klasę z Min, jak mogę CallBase dla właśnie specyficzny metody?] (http://stackoverflow.com/questions/2822947/when-mocking-a-class-with-moq-how-can-i-callbase- for-just-specific-metods) – StriplingWarrior
Jeśli zrobisz swoje ' GetValue' metoda 'public' zamiast' internal' działa. Nie wiem, dlaczego to może być ograniczenie dynamicznego proxy proxy, czy jest to błąd Moq, czy to jest zamierzone zachowanie. W każdym razie, jeśli zostawisz to jako wewnętrzne, nie możesz umieścić swojego kodu produkcyjnego w innym zestawie, chyba że użyjesz InternalVisibleTo. – nemesv
możliwy duplikat [Weryfikacja metody została wywołana] (http://stackoverflow.com/questions/1980108/verifying-a-method-was-called) – nemesv