C'è già un thread on the RhinoMocks group.
GenerateMock crea una simulazione dinamica. La simulazione dinamica consente le chiamate che non sono specificate (= previsto). Se ciò accade, restituisce semplicemente null (o il valore predefinito del tipo restituito).
Nota: La ripetizione è una specifica del comportamento (come Stub), non l'aspettativa anche se specificata in un'aspettativa.
Se si vuole evitare di avere più di un certo numero di chiamate, si potrebbe scrivere:
[Test]
public void uhh_what()
{
var a = MockRepository.GenerateMock<IPrebuiltNotifier>();
a.Expect(x => x.Notify()).Repeat.Once();
a.Stub(x => x.Notify()).Throw(new InvalidOperationException("gotcha"));
a.Notify();
// this fails
a.Notify();
a.VerifyAllExpectations();
}
O
[Test]
public void uhh_what()
{
var a = MockRepository.GenerateMock<IPrebuiltNotifier>();
a.Notify();
a.Notify();
// this fails
a.AssertWasCalled(
x => x.Notify(),
o => o.Repeat.Once());
}
fonte
2009-05-20 12:10:56
oh! Non sapevo che AssertWasCalled aveva un secondo argomento in cui si potevano fare più specifiche, questo cambia tutto! –
È lo stesso problema con PartialMock, se mai ci passi sopra. – Dennis
La prima soluzione (dove si genera un'eccezione) _will_ effettua il test fallito se 'Notify' viene chiamato più di una volta. Tuttavia, se è chiamato solo una volta (almeno questo è quello che presumo dovrebbe fare il codice sotto test), il test non passerà come dovrebbe perché si aspetta una chiamata _second_ a 'Notify' che non arriva mai. Impostare 'a.Expect (x => x.Notify()). Repeat.Once()' seguito da 'a.Stub (x => x.Notify()). Getti (...)' per fare il lavoro. – geoffmazeroff