I’m +1 for concentrating on AAA – is so much easier to teach newbies (not that I’m an expert…)
After looking at the source code of Rhino.Mocks. I started using
PartialMock for AAA in my tests. It is working surprisingly well. See
the code below.
Cheers,
Kenneth
class Mockery : MockRepository
{
public static T GeneratePartialMock<T>(params object[]
argumentsForConstructor)
where T : class
{
var mockery = new MockRepository();
var mock = mockery.PartialMock<T>(argumentsForConstructor);
mockery.Replay(mock);
return mock;
}
}
[Test] public void
NewTaskForCallGetsNewTaskFromAbstractExecutorService()
{
Call<T> call = delegate
{
return TestData<T>.One;
};
var futureTask = Mockery.GeneratePartialMock<FutureTask<T>>(call);
ExpectExecuteCallAndRunTheRunnableInCurrentThread();
_executor.Expect(e => e.NewTaskFor(call)).Return(futureTask);
var f1 = _sut.Submit(call);
Assert.That(f1, Is.SameAs(futureTask));
var f2 = _sut.Poll();
Assert.That(f2, Is.SameAs(futureTask), "submit and take
must return same objects");
futureTask.AssertWasCalled(ft => ft.Done());
_executor.VerifyAllExpectations();
}
private void ExpectExecuteCallAndRunTheRunnableInCurrentThread()
{
_executor.Expect(e => e.Execute(Arg<IRunnable>.Is.NotNull))
.WhenCalled(r => ((IRunnable)r.Arguments[0]).Run());