2010-08-03 3 views
1

J'essaie de comprendre l'idée de tester les fonctionnalités et de minimiser le nombre d'assertions.Unité testant une méthode de service - comment l'affirmer

permet donc dire que j'ai une telle méthode de service:

public void TransferFunds(int debitedId, int creditedId, Sum funds) 
{ 
    Account debited = accountRepository.Get(debitedId); 
    Account credited = accountRepository.Get(creditedId); 
    debited.Debit(Sum); 
    credited.Credit(Sum); 
    accountRepository.Update(debited); 
    accountRepository.Update(credited); 
} 

Mes tests unitaires, je présume devrait alors se scinder en deux, en testant l'octroi de crédits d'un compte et le débit de l'autre. Mais dois-je affirmer sur chaque compte l'état actuel, pour vérifier que la somme a été ajoutée/déduite - ou est-ce un test pour mon modèle de compte? Si oui, que devrais-je affirmer? cette mise à jour a été appelée? Cela ne vérifie pas la fonctionnalité ...

Quelqu'un a une idée?

Répondre

1

Si vous testez le résultat (c'est-à-dire les soldes finaux), vous testez également les objets Account, qui ne sont pas testés ici, vous devriez donc essayer de l'éviter si possible.

Dans ce scénario, je m'attendrais à ce que Account soit une interface que vous pouvez simuler. Je ne suis pas sûr de la langue que vous utilisez (ressemble peut-être à C#). En Java, je le ferais avec une interface et jMock.

Ensuite, vous affirmez que la méthode TransferFunds appelle Débit avec le bon Sum sur le bon compte, et appelle Crédit avec la bonne somme sur le bon compte. Vous aurez également besoin de simuler votre référentiel de compte et que votre maquette faille retourner vos faux comptes en réponse à AccountRepository.Get

+0

Danny- Merci pour la réponse rapide! Ainsi, la façon dont vous le voyez ne sera que de 2 assertions: debited.AssertWasCalled (x => x.Debit (sum)); credited.AssertWasCalled (x => x.Credit (somme)); Non affirme le accountRepository (accountRepository.AssertWasCalled (r => r.Update (crédité)), ou pour le débités pour cette matière) Ouais, ça fait du sens :) merci! – nieve

+0

Comme je l'ai dit, je ne suis pas familier avec le langage ou le framework que vous utilisez, mais en Java/jMock, je ferais ce qui suit: * Faire deux comptes fictifs * Faire un faux compteRépertoire * "Autoriser" le AccountRepository pour renvoyer les comptes quand demandé avec les IDs corrects (je ne «aurais pas besoin de ceci parce que ce n'est pas la fonctionnalité que nous essayons de tester) * Affirment que la méthode de débit est appelée sur le premier compte avec la bonne somme * Affirmer que la méthode du crédit est appelée sur le deuxième compte avec la somme de – dty

Questions connexes