J'ai créé un test unitaire qui teste les interactions sur ma classe ViewModel dans une application Silverlight. Pour pouvoir faire ce test, je me moque de l'interface de service, injectée dans ViewModel. J'utilise le framework Moq pour faire les moqueries.Utilisation correcte des rappels Moq selon AAA
pour pouvoir vérifier objet limité au ViewModel est converti correctement, je l'ai utilisé un rappel:
[Test]
public void SaveProposal_Will_Map_Proposal_To_WebService_Parameter()
{
var vm = CreateNewCampaignViewModel();
var proposal = CreateNewProposal(1, "New Proposal");
Services.Setup(x => x.SaveProposalAsync(It.IsAny<saveProposalParam>())).Callback((saveProposalParam p) =>
{
Assert.That(p.plainProposal, Is.Not.Null);
Assert.That(p.plainProposal.POrderItem.orderItemId, Is.EqualTo(1));
Assert.That(p.plainProposal.POrderItem.orderName, Is.EqualTo("New Proposal"));
});
proposal.State = ObjectStates.Added;
vm.CurrentProposal = proposal;
vm.Save();
}
Il fonctionne très bien, mais si vous avez remarqué, en utilisant ce mécanisme et la Assertion Une partie du test unitaire a changé de partie (Assert vient avant Agir). Y a-t-il une meilleure façon de le faire, tout en préservant l'ordre AAA correct?