2011-07-29 22 views
23

Używając Rhino Mocks, w jaki sposób upewnić się, że metoda nie jest wywoływana podczas konfigurowania oczekiwań na próbnym obiekcie.Jak ustawić wywołanie Expect, aby sprawdzić, czy metoda nie jest wywoływana w Rhino Mocks

W moim przykładzie testuję metodę Commit i muszę się upewnić, że metoda Rollback nie zostanie wywołana podczas wykonywania commit. (To dlatego, że mam logiki w sposobie popełnienia który automatycznie wycofać jeśli zobowiązują się nie powiedzie)

Oto jak kod wygląda ..

[Test] 
public void TestCommit_DoesNotRollback() 
{ 
    //Arrange 
    var mockStore = MockRepository.GenerateMock<IStore>(); 
    mockStore.Expect(x => x.Commit()); 
    //here i want to set an expectation that x.Rollback() should not be called. 

    //Act 
    subject.Commit(); 

    //Assert 
    mockStore.VerifyAllExpectation(); 
} 

Oczywiście, można zrobić to w fazie Assert jak ta :

mockStore.AssertWasNotCalled(x => x.Rollback()); 

Ale chciałbym ustawić to jako oczekiwanie w pierwszej kolejności.

+0

Ciekawi mnie, dlaczego chcesz używać Expectation, a nie tylko wybrać AssertWasNotCalled? – Cousken

+0

@Cousken AssertWasNotCalled() wydaje się nie działać z BackToRecord() i Replay(), może to jest powodem? – danio

Odpowiedz

8

Czy tego właśnie szukasz?

ITest test = MockRepository.GenerateMock<ITest>(); 
test.Expect(x => x.TestMethod()).AssertWasNotCalled(mi => {}); 
+0

@Santhosh: czy to działa dla Ciebie? – sll

+0

to nie działa dla mnie –

34

Innym rozwiązaniem byłoby:

mockStore.Expect(x => x.Rollback()).Repeat.Never(); 
3

Oto kolejna opcja:

 mockStore.Stub(x => x.DoThis()).Repeat.Times(0); 

     //EXECUTION HERE 

     x.VerifyAllExpectations(); 
2

W tym przypadku I stworzył metodę rozszerzenia, aby lepiej pokazać moją intencję

public static IMethodOptions<RhinoMocksExtensions.VoidType> ExpectNever<T>(this T mock, Action<T> action) where T : class 
{ 
    return mock.Expect(action).IgnoreArguments().Repeat.Never(); 
} 

Uwaga: z wywołaniem IgnoreArguments(). Zakładam, że nie chcesz, aby metoda była wywoływana kiedykolwiek ... bez względu na wartość parametru.

Powiązane problemy