(C#, Rhino Mocks, MbUnit).Unité testant une méthode sans changement d'état observable
J'ai une classe appelée AccountManager qui a une méthode RegisterUser(). Cette méthode renvoie void mais lance une exception pour les erreurs. AccountManager appelle dans un IDataRepository en appelant sa méthode AddUser() pour effectuer une insertion de base de données.
Je me moque de l'IDataRepository à l'aide d'un Rhino Mock et lance et exception pour un ensemble donné d'arguments simulant l'exception soulevée dans le référentiel.
[Test]
public void RegisterKnownUser()
{
MockRepository mocks = new MockRepository();
IDataRepository dataRepository = mocks.StrictMock<IDataRepository>();
using (mocks.Record())
{
Expect.Call(() => dataRepository.AddUser("abc", "abc", "[email protected]", "a", "bc")).Throw(
new InvalidOperationException());
}
using (mocks.Playback())
{
AccountManager manager = new AccountManager(dataRepository);
Assert.Throws(typeof (InvalidOperationException),() => manager.RegisterUser("abc", "abc", "[email protected]", "a", "bc"));
}
}
Ce test fonctionne correctement.
Ma question est quoi faire à propos de la situation où les arguments fournis à RegisterUser sont corrects et valides. Le vrai IDataRepository ne retournerait rien et ne jetterait aucune exception. Donc, en bref, l'état de AccountManager n'aurait pas changé. Cela signifie-t-il que je n'ai pas besoin de tester AccountManager.RegisterUser quand cela ne résulterait en rien que je puisse observer directement dans la classe et la méthode testées. Test contre l'état dans le simulacre sent un peu pour moi. Je pense que tant que je teste IDataRepository.AddUser séparément, je ne devrais pas avoir besoin de tester AccountManager.RegisterUser pour les entrées qui aboutiraient à rien d'observable dans la classe.
Merci d'avance.
Ribgy: Pouvez-vous fournir le code du scénario de test que vous essayez de décrire? AccountManager pourrait-il appeler dans dataRepository? –