Dans votre exemple, vous ne aurez pas besoin RhinoMocks parce que vous êtes apparemment tester la fonctionnalité de la classe sous test. tests unitaires simple fera à la place:
[Test]
public void SomeTest()
{
var sc = new SomeClass();
// Instantiate SomeClass as sc object
sc.SomeMethod();
// Call SomeMethod in the sc object.
Assert.That(sc.SomeProp, Is.True);
// Assert that the property is true...
// or change to Is.False if that's what you're after...
}
Il est beaucoup plus intéressant de tester se moque quand vous avez une classe qui a des dépendances sur d'autres classes. Dans votre exemple, vous mentionnez:
// Code fichier, WCF, opération db ici avec _someArg
à savoir vous vous attendez à ce que d'autres classes définissent la propriété de SomeClass
, ce qui a plus de sens pour mocktest. Exemple:
public class MyClass {
ISomeClass _sc;
public MyClass(ISomeClass sc) {
_sc = sc;
}
public MyMethod() {
sc.SomeProp = true;
}
}
Le test requis irait quelque chose comme ceci:
[Test]
public void MyMethod_ShouldSetSomeClassPropToTrue()
{
MockRepository mocks = new MockRepository();
ISomeClass someClass = mocks.StrictMock<ISomeClass>();
MyClass classUnderTest = new MyClass(someClass);
someClass.SomeProp = true;
LastCall.IgnoreArguments();
// Expect the property be set with true.
mocks.ReplayAll();
classUndertest.MyMethod();
// Run the method under test.
mocks.VerifyAll();
}
Dans votre dernier exemple, le Lastcall.IgnoreArguments(); serait une fausse passe parce que vous pourriez aussi passer le test en passant someClass.SomeProp = false; – mendicant