public abstract class MessageBase { private List<User> _receivers = new List<User>(); public void Send() { //Some setup DetermineReceivers(); SendMessages(); } private void SendMessages() { //Lots of logic } protected abstract void DetermineReceivers(); protected void AddReceiver(Group g) { //Lots of logic <---- Test this } }
TestFixture public sealed class MessageBaseTester { public abstract class MockMessageMocker { public abstract List<Group> RecipientsGroups { get; set; } } private class MockMessage : MessageBase { private MockMessageMocker _mock; public MockMessage(MockMessageMocker mock) { _mock = mock; } protected override void DetermineReceivers() { if (_mock.RecipientsGroups != null) foreach(Group g in _mock.RecipientsGroups) base.AddReceiver(g); } } }
Test public void ShouldblablablaWhenBlabla() { var SuThelper = mocks.Stub(); var SuT = new MockMessage(SuThelper); using (mocks.Record()) { Expect.Call(SuTHelper.RecipientsGroups).Return(new List<Group>{ new Group(...) }); } using (mocks.Playback()) { SuT.Send(); } }