AntonioGanci

Il blog di Antonio Ganci
posts - 201, comments - 420, trackbacks - 31

Usare Rhino Mocks per sviluppare in TDD

Per chi sviluppa in TDD utilizzare i Mock Objects è una delle basi dell'interaction based testing.

Per facilitare questo compito sono disponibili alcune librerie in rete. Fino all'anno scorso ho utilizzato TypeMock, ora con l'anno nuovo ho voluto provare un'altra libreria ed ho scaricato Rhino Mocks.

Le prime impressioni sono positive in quanto l'object model mi sembra più chiaro rispetto a TypeMock. Ho avuto qualche difficoltà con in metodi che non ritornano valori (void).

Vediamo un esempio pratico:

Supponiamo di voler creare un mock object della seguente interfaccia:

    public interface ICustomerList

    {

        void Add(Customer customer);

        int Count { get;}

    }

Il codice del test sarà:

    [Test]

    public void RhinoMocksSampleTest()

    {

          MockRepository mockRepository = new MockRepository();

          ICustomerList customers = mockRepository.CreateMock<ICustomerList>();

 

          Expect.Call(customers.Count).Return(10);

          mockRepository.ReplayAll();

 

          Assert.AreEqual(10, customers.Count);

 

          mockRepository.VerifyAll();

    }

Con la chiamata Expect.Call indichiamo che la prossima volta che viene letto il valore della property Count dell'interfaccia ICustomerList viene ritornato il valore 10. Un pò più complicato è invece il mock del metodo Add perchè non ritorna nessun valore e quindi non si può usare ExpectCall:

        [Test]

        public void RhinoMocksSampleTest()

        {

            MockRepository mockRepository = new MockRepository();

            ICustomerList customers = mockRepository.CreateMock<ICustomerList>();

 

            customers.Add(new Customer());

            LastCall.Repeat.Once().IgnoreArguments();

            mockRepository.ReplayAll();

 

            customers.Add(new Customer());

 

            mockRepository.VerifyAll();

        }

In questo caso abbiamo detto che ci aspettiamo una sola chiamata del metodo Add e non ci interessa il valore dei parametri.

Print | posted on mercoledì 3 gennaio 2007 19:47 | Filed Under [ Extreme Programming ]

Feedback

Gravatar

# Re: Usare Rhino Mocks per sviluppare in TDD

io adoro Rhino.Mocks, ed effettivamente sì, il problema maggiore è con i metodi void.
in genere se posso evito il "IgnoreArguments" perchè mi toglie un grado di controllo.

se vuoi ho postato degli esempi, guarda su
http://blogs.ugidotnet.org/papo

ciao
03/01/2007 22:28 | papo
Gravatar

# re: Usare Rhino Mocks per sviluppare in TDD

Ho approfondito abbastanza il confronto tra TypeMock e RhynoMock, all'inizio pensavo che RM fosse una spanna sopra TM ma dopo aver guardato bene il NTM di TM sono arrivato alla conclusione che i framework offrono le stesse potenzialità ed un object model molto simile.
Con il vantaggio indiscutibile che RM è OS.

Ciao,
Antonio.
08/01/2007 11:48 | Antonio Carpentieri
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET