2013-05-22 7 views
9

Rozważmy następujące, gdzie jestem testowania metoda wtryskiwanego zależnościami nazywa się określoną liczbę razy:Podczas używania Moq Sprawdź() Ilość wywołania metody, które w przypadku braku komunikatu o błędzie testowego zawiera rzeczywistą liczbę metoda wywołania przy użyciu MOQ

[Fact] 
public void WhenBossTalksEmployeeBlinksTwice() 
{ 
    // arrange 
    var employee = new Mock<IEmployee>(); 
    employee.Setup(e => e.Blink()); 

    var boss = new Boss(employee.Object); 

    // act 
    boss.Talk(); 

    // assert 
    employee.Verify(e => e.Blink(), Times.Exactly(2)); // Passes as expected 
    employee.Verify(e => e.Blink(), Times.Exactly(1)); // Fails as expected 
} 

Gdy siłę test niedostatecznej wyjście jest:

Moq.MockException: Wywoływanie nie przeprowadzono na pozornie 1 czas: e => e.Blink()

Co byłoby lepsze jest coś takiego:

Moq.MockException: Inwokacja nieoczekiwanie wykonywane 2 razy, a nie 1 raz: E => e.Blink()

Oto przedmioty związane z testem:

public interface IEmployee { void Blink(); } 

public class Boss { 
    private readonly IEmployee _employee; 
    public Boss(IEmployee employee) { _employee = employee; } 

    public void Talk() { 
     _employee.Blink(); 
     _employee.Blink(); 
    } 
} 

Czy można zbierać i wyświetlać rzeczywista liczba razy zależność w komunikacie o błędzie niepowodzenia testu?

Nie jestem pewien, czy to ma znaczenie, ale używam Moq v3.1.416.3 (nie najnowszego, wiem, ale inna biblioteka, której używam, nie została zaktualizowana do wersji Moq 4.x ...)

+1

+1 dla kodu przykład :) – ljubomir

+3

Ponieważ znalazłem to w moim googling, myślałem, że dostarczenie aktualizacji. W Moq v4.1 (a może we wszystkich 4.x) pojawi się coś takiego: "oczekiwane wywołanie na makiecie raz, ale było 0 razy". Tak więc odpowiedź na to pytanie jest już nieaktualna. –

Odpowiedz

12

Nie znam prostego sposobu na zbieranie informacji w Moq3. co chciałbym zrobić, to użyć zwrotnego od konfiguracji Blink

int count = 0; 
    employee.Setup(e => e.Blink()).Callback(() => count++); 

    ... 
    employee.Verify(e => e.Blink(), Times.Exactly(1), "Moq.MockException: Invocation was unexpectedly performed " + count + " times, not 1 time: e => e.Blink()"); // Fails as expected 
+3

świetny pomysł! robisz coś innego, kiedy osobiście używasz Moq 4.x? – Jeff

Powiązane problemy