IMHO, Rhino Mocks genera un messaggio diagnostico non chiaro quando si utilizza AssertWasCalled per verificare che un metodo sia stato chiamato con un argomento specifico.Rhino Mocks - AssertWasCalled: Come migliorare un messaggio diagnostico non chiaro quando argomenti errati
Esempio:
interface ISomeInterface
{
void Write(string s);
}
[TestFixture]
public class SomeTests
{
[Test]
public void WriteShouldBeCalledWithCorrectArguments()
{
// Arrange
var mock = MockRepository.GenerateMock<ISomeInterface>();
var sut = new SomeClass(mock);
// Act
sut.DoSomething();
// Assert
mock.AssertWasCalled(x => x.Write(Arg<string>.Is.Equal("hello")));
}
}
Ora, se il test non riesce con questo messaggio ...
Rhino.Mocks.Exceptions.ExpectationViolationException: ISomeInterface.Write (pari a ciao); Previsto # 1, effettivo # 0.
... non si può sapere se non riesce a causa
A. 'scrittura' non viene mai richiamato oppure
B. 'scrittura' è infatti invocato, ma con l'argomento errato
Se B sarebbe la causa del guasto allora sarebbe tanto più chiaro se il messaggio avrebbe letto qualcosa di simile:
Rhino.Mocks.Exceptions.ExpectationViolationException: ISomeInterface.Write (stringa arg): Metodo è stato chiamato, ma con l'argumen errato Attesi: ciao, Actual: ciao
Posso risolvere io stesso questa lacuna (scrivendo abbinamenti personalizzati per Rhino in qualche modo) o devo semplicemente scrivere un manuale di simulazione per questo?
Considera di provare Moq e/o eseguire test basati sullo stato. http://code.google.com/p/moq/ – TrueWill
Sfortunatamente, Moq ha lo stesso problema. – Chris