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
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:
Mock,
Test,
RhinoMock