Question

Dire que j'ai trois méthodes, très similaires, mais avec différents types d'entrée:

void printLargestNumber(int a, int b) { ... }
void printLargestNumber(double a, double b) { ... }
void printLargestNumber(String numberAsString, String numberAsString) { ... }

Les trois utilisent la même logique sous-jacente. Par exemple: peut-être la version double est le seul qui compare les numéros et les deux autres simplement convertir leurs entrées à double

.

On pourrait imaginer quelques différents tests unitaires. Première entrée est plus grande, la deuxième est plus grande, les deux entrées sont négatives, etc

Ma Question

Si toutes les trois méthodes ont l'ensemble de tests (boîte noire puisque nous ne supposons pas la mise en œuvre de base est le même)

ou

ne devrait porter que la version double être testé fortement et les deux autres testé légèrement pour vérifier la conversion des paramètres (test boîte blanche puisque nous savons qu'ils partagent la même mise en œuvre et il a déjà été testé dans les tests double)?

Était-ce utile?

La solution

Si toutes ces méthodes sont publiques, à savoir appelable par le monde extérieur, je voudrais certainement tester tous avec un ensemble complet de tests. Une bonne raison est que les tests boîte blanche sont plus fragiles que les tests de boîte noire; si la mise en œuvre change du marché public pourrait changer pour certaines de ces méthodes.

Autres conseils

Cela dépend.

Pensez-vous que la mise en œuvre est susceptible de changer? Si oui, alors aller avec des tests de boîte noire.

Si vous pouvez garantir que la mise en œuvre ne changera pas aller avec boîte blanche. Cependant, les chances de vous être en mesure de garantir ce ne sont pas 100%.

Vous pouvez faire des compromis et faire quelques-uns des tests de boîte noire, en particulier autour des conditions aux limites. Cependant, l'écriture des tests devrait être facile - il n'y a donc aucune excuse de ce point de vue pour pas faire des tests complets de boîte noire. Le seul facteur limitant est le temps qu'il faut pour exécuter les tests.

Peut-être que vous devriez étudier la possibilité d'exécuter les tests en parallèle.

Il y a une série de tests qui exercent explicitement les interfaces publiques. Je traiterais les tests comme boîte noire.

Il y a une deuxième série de tests qui pourraient être considérés comme regardant les cas d'angle de la mise en œuvre. Ceci est le test de boîte blanche et a sûrement une place dans un test unitaire. Vous ne pouvez pas connaître les chemins intéressants sans une certaine connaissance de la mise en œuvre boîte blanche. J'accorder une attention particulière à l'affaire String, car l'interface permet de chaînes qui peuvent ne pas convertir proprement à double, qui repoussent les limites de précision etc.

Aurais-je coupé quelques coins dans le cas entier? Je sais que je poussais les chemins dans le double cas, ne devrait probablement pas, mais pourrait bien sous la pression du temps.

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