First make sure you know what you mean for each A in AAA. You may know but I'll include my working definitions for completeness of the answer:
- Arrange is where I set up inputs, mocks/stubs, the object with the method under test
- Act is where I call the method under test
- Assert is where I verify things occurred or didn't according to expectation
I like to put comments in my test code to remind me to think about each of those things. An example may help clarify: Suppose I have a service layer class which uses two provider layer classes, one from an "old" system and one from a "new" system; I am testing that the method which copies old things to the new system calls the "CreateThing" method one time for each old thing found.
[Test]
public void Should_create_new_Thing_for_each_old_Thing()
{
// -----
// arrange
// hardcode results from old system provider
List<Thing> oldThings = new List<Thing> { ... };
// old system provider
var oldProvider = MockRepository.GenerateStub<IOldSystemProvider>();
oldProvider.Stub(m=>m.GetThings()).Return(oldThings);
// new system provider
var newProvider = MockRepository.GenerateStub<INewSystemProvider>();
// service object
var svc = new MyService(oldProvider, newProvider);
//-----------
// act
var result = svc.CopyThings();
//------------
// assert
oldThings.ForEach(thing =>
newProvider.AssertWasCalled(prov => prov.CreateThing(thing)));
}
answered 2010-07-12T17:48:58.743