Usare un framework di mock nei test – Behavior stub

Nel post precedente avevamo visto come creare Stub con RhinoMock, ora vedremo invece come simulare il valore di ritorno di un metodo.

Esempio 2 – Valori di ritorno di un metodo

Mock2

Il nostro obiettivo è testare il metodo ApproveOrder, che imposta la proprietà ApprovedBy recuperando l'utente a partire dal id.

public class OrderManager
{
    IDataContext context;

    public OrderManager(IDataContext context)
    {
        this.context = context;
    }

    public void ApproveOrder(Order order, Int32 idUser)
    {
        User user = context.GetByKey<User>(idUser);

        order.ApprovedBy = user;

        context.Save<Order>(order);
    }
}

Dobbiamo fare in modo di farci restituire dal context.GetByKey un istanza di User per verificare che ApprovedBy sia stata valorizzata.

[TestMethod()]
public void ApproveOrderTest1()
{
    var context = MockRepository.GenerateStub<IDataContext>();

    context.Stub(x => x.GetByKey<User>(1)).Return(new User() { Id = 1, Name = "Rossi" });

    OrderManager target = new OrderManager(context);
    Order order = new Order();
    Int32 idUser = 1;
    
    target.ApproveOrder(order, idUser);

    Assert.AreEqual(order.ApprovedBy.Id, idUser);
}

RhinoMock ci permette di creare una classe di mock che implementa l’interfaccia IDataContext che si aspetta una chiamata del metodo GetByKey<User> con il parametro idUser impostato a 1 e ritorna una istanza di User.
Se avessimo voluto ignorare i parametri in ingresso ci bastava aggiungere in modo fluent IgnoreArguments().

Tag di Technorati: ,,

posted @ venerdì 11 giugno 2010 22:00

Print

Comments on this entry:

# re: Usare un framework di mock nei test – Expect.Call

Left by Tix at 12/06/2010 18:28
Gravatar
Ciao,
Nel tuo test non stai verificando che il tuo mock stia funzionando.
dalla versione 3.5 in poi di Rhino puoi creare le mock instance senza utilizzare un repository, cosi' ti risparmi qualche riga di codice e rendi piu' leggibile il test.

# re: Usare un framework di mock nei test – Expect.Call

Left by emanuele delbono at 13/06/2010 00:14
Gravatar
Più che un Expect.Call avrei usato un SetupResult.For che è più parlante e adatto al contesto.

# re: Usare un framework di mock nei test – Behavior stub

Left by rcappe@gmail.com at 14/06/2010 20:31
Gravatar
Emanuele:
Grazie del tuo consiglio fa sempre piacere imparare e migliorarsi.
Probabilmente scriverò un'altro post dove verificare se un metodo è stato chiamato o quante volte è stato chiamato è importante
Comments have been closed on this topic.
«maggio»
domlunmarmergiovensab
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678