Question

Je suis readin http://xunitpatterns.com/Test%20Stub.html avez des questions sur l'utilisation des talons, par exemple, dans le code indiqué sur la page de l'auteur crée une classe appelée TimeProviderTestStub.java pour une utilisation dans le code de test. J'ai quelques doutes au sujet de cette ligne dans le code de test:

TimeDisplay sut = new TimeDisplay();
  //      Test Double installation
  sut.setTimeProvider(tpStub);

Ai-je besoin de ma classe modifie (SUT) pour recevoir un objet TimeProviderTestSub?

Était-ce utile?

La solution

Tant le talon et la classe réelle sont censés mettre en œuvre une interface, à savoir ITimeProvider et setTimeProvider() devrait prendre cette interface comme paramètre. L'interface doit exposer toutes les méthodes que les besoins SUT d'interagir avec l'objet, puisque TimeDisplay peut désormais utiliser uniquement l'objet via l'interface ITimeProvider (ce qui nous permet d'utiliser un talon au lieu de l'objet réel dans nos tests).

Dans l'exemple, le SUT (TimeDisplay) semble seulement besoin de la méthode getTime(), donc l'interface ne doit contenir que cette méthode:

public interface ITimeProvider {
    Calendar getTime();
}

La déclaration du talon doit être

public class TimeProviderTestStub implements ITimeProvider { ... }

et la déclaration de la classe réelle devrait être

public class TimeProvider implements ITimeProvider { ... }

Enfin, le SUT doit changer sa méthode setter pour accepter l'interface:

public void setTimeProvider(ITimeProvider timeProvider) { ... }

et aussi changer son champ de timeProvider interne pour être du type ITimeProvider.

Si vous ne contrôlez pas le code de la classe réelle (de sorte que vous ne pouvez pas faire implémenter l'interface), vous pouvez créer une classe d'adaptateur qui enveloppe la vraie classe et implémente l'interface.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top