So very close!!! Change:
invoiceSvc. AssertWasCalled(x => x.Save(Arg<Invoice>.Is.Anything)); // not mocked.. won't work TO repository. AssertWasCalled(x => x.Save(Arg<Invoice>.Is.Anything)); You should be good to go. On Fri, Feb 6, 2009 at 10:17 AM, Cote, Don <[email protected]> wrote: > This might be rudimentary, but I'm having trouble figuring it out. And > if this question has been posed a zillion times, just point me to the > resource that explains it and I'll take it from there. Many thanks in > advance! -- Don > > > > > > I have a service class for my invoice entity. I'm injecting a repository > object in through its constructor… pretty straightforward stuff (see down at > the bottom). > > > > Now I want to be able to test a ProcessStatusChange method, which does some > business logic processing and eventually calls a private Save method, which > relies on the repository field. What I ultimately want to do is to assert > that the Save method was called. > > > > So… I would like to avoid using my IoC container in my tests, but is there > a way to mock out my service class, but also pass it my mocked out > repository as well? Let me know if this needs any more clarification. > > > > Here are my takes on how to do this. The first one definitely won't work > because the invoiceSvc isn't being mocked. The second one doesn't work > because there's no repository object in invoiceSvc, since it was mocked > out. > > > > [Test] > > public void ProcessStatusChangeTest-*Version1*() > > { > > var repository = MockRepository.GenerateMock<IRepository<Invoice>>(); > > var invoiceSvc = new InvoiceService(_repository); > > > > invoiceSvc.ProcessStatusChange(new Invoice()); > > > > invoiceSvc. AssertWasCalled(x => x.Save(Arg<Invoice>.Is.Anything)); > // not mocked.. won't work > > } > > > > [Test] > > public void ProcessStatusChangeTest-*Version2*() > > { > > var invoiceSvc = MockRepository.GenerateMock<IInvoiceService>(); > > > > invoiceSvc.ProcessStatusChange(new Invoice()); > > > > invoiceSvc. AssertWasCalled(x => x.Save(Arg<Invoice>.Is.Anything)); > > > > // ^^ this fails because the InvoiceService doesn't have an > instantiated IRepository<Invoice> > > } > > > > > > public class InvoiceService : IInvoiceService > > { > > private readonly IRepository<Invoice> _repository; > > > > public InvoiceService(IRepository<Invoice> repository) > > { > > _repository = repository; > > } > > > > public void ProcessStatusChange(Invoice invoice) > > { > > .... some business logic.... > > > > this.Save(invoice); > > } > > > > private Save(Invoice invoice) > > { > > _repository.Save(invoice); > > } > > } > > > > > > Don Cote * > Kenexa(R) > HIRING & RETENTION > Outsourcing | Employee Research | Software* > > > *Office:* 781-530-5049 > > *Mail:* 343 Winter Street, Waltham, MA 02451 > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Rhino.Mocks" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/RhinoMocks?hl=en -~----------~----~----~----~------~----~------~--~---
