Sto cercando di seguire TDD nel mio proj ma non riesco a capire come verificare che io stia chiamando correttamente una dipendenza o anche se dovrei provare a verificarlo. Ecco il requisito:
Scrivi una classe AddSalesOrderTask che è responsabile per l'aggiunta di un ordine a un sistema ERP. La classe può prendere qualsiasi dipendenza necessaria ma deve avere una firma del metodo Execute come questa:
public class AddSalesOrderTask {
public override bool Execute(OrderData input) {
throw new NotImplementedException();
}
}
Il metodo AddSalesOrderTask.Execute deve mappare OrderData in ERPSalesOrder e quindi chiamare IERPClient.AddSalesOrder.
Ho un'interfaccia per accedere al servizio ERP in questo modo:
public interface IERPClient {
void AddSalesOrder(ERPSalesOrder order);
}
Come posso verificare che la mappatura sia eseguita e poi passata nel client? Dovrei testare entrambe le operazioni con questo metodo? Per rendere questo testabile il mio primo pensiero è stato quello di introdurre un'interfaccia IMapper e passarla come dipendenza a AddSalesOrderTask:
public interface IMapper<in TFrom, in TTo> {
void Map(TFrom source, TTo destination);
}
Seguire TDD sarebbe un buon primo test?
private AddSalesOrderTask _testObj;
[Fake, UsedImplicitly]
private IERPClient _client;
[Fake, UsedImplicitly]
private IMapper<Order, SalesOrder> _mapper;
[TestInitialize]
public void MyTestInitialize() {
Fake.InitializeFixture(this);
_testObj = new AddSalesOrderTask();
}
[TestMethod]
public void Execute_MappedSalesOrderAddedToERP() {
// Arrange
var input = new OrderData();
var salesOrder = new SalesOrder();
// Act
_testObj.Execute(input);
// Assert
A.CallTo(() => _mapper.Map(context.Order, salesOrder))
.MustHaveHappened();
A.CallTo(() => _client.AddSalesOrder(salesOrder))
.MustHaveHappened();
}
Sto pensando a questo correttamente?