Supposons que je répète un em> bibliothèque de modèle em> consistant en un modèle de fonction avec l'obligation de fonctionner avec un ensemble prédéfini de classes A, B, C , et d, par exemple, les éléments suivants doivent compiler: p> quel cadre de test puis-je utiliser pour écrire des cas de test qui capture cette exigence au lieu d'exécution au lieu de l'échec de la compilation du test code? Dans un autre mot, j'aimerais que le cadre instancier les modèles à exécution em> et produire un rapport d'erreur bien formaté si un sous-ensemble d'entre eux échoue. P> Je sais que je peux renoncer aux cadres de test tout à fait et écrivez simplement un fichier CC simple contenant les 4 lignes ci-dessus. Mais j'espérais que je pouvais incorporer cette exigence dans des cas de test standard réguliers pour la génération de rapports d'état des tests. Par exemple, P> test f works with A: passed.
test f works with B: passed.
test f works with C: failed! Cannot cast type C!
test f works with D: passed.
3 of 4 tests passed.
1 of 4 tests failed.
4 Réponses :
Sur la base de ce que vous essayez de tester ici, vérifiez si la chose peut compiler est le seul test sensible que vous pouvez effectuer. P>
Les tests ne doivent pas être pour des mesures de test, mais pour assurer la correction fonctionnelle. Si vous souhaitez avoir des tests appropriés autour de votre classe, vous devez écrire des tests qui vérifient la fonctionnalité de votre modèle avec toutes les 4 classes différentes, il peut être compilé. P>
Je ne comprends pas pourquoi l'échec de l'exécution est préférable d'échouer à la compilation. Plus tôt vous échouez dans le processus de test unitaire, mieux c'est. Il est préférable que vos tests d'unité ne soient pas compilés que l'échec. C'est encore plus facile à résoudre, en fait, il ne sera probablement même pas engagé à contrôler la source. Votre test de l'unité devrait simplement inclure ces quatre lignes et affirmer true à la fin. Notez que ce n'est pas la façon dont je voudrais le faire moi-même. P>
Parce que nous aimerions capturer toutes les spécifications fonctionnelles, être capturé comme des tests unitaires à déclarer comme progrès de projet. Si le programme de test ne compile même pas, aucun des tests n'est rapporté - même ceux qui ont passé.
Peut-être devriez-vous casser votre programme de test en plusieurs programmes, un par test. Cela éviterait le problème que vous décrivez ci-dessus.
Écrivez un cas de test qui reproche le compilateur ... c'est comme ça Autoconf Code> Tests d'existence de fonctionnalités. P>
+1: Voilà comment les compilateurs sont aussi testés: P Vous voudrez peut-être consulter le cadre allumé code> dans le LLVM / Clang, ce qui permet de spécifier les erreurs attendues dans les commentaires en ligne à côté du test.
C ++ Les modèles sont une fonction de compilation. Dans de nombreux cas, ils échoueront à la compilation de la conception. Vous ne pouvez tout simplement pas contourner ce sans faire quelque chose de vraiment fou . P>
Cependant, vous allez également savoir que vos spécialisations de modèle sont correctes, car les spécialisations remplacent le comportement que vous recevriez autrement du modèle. Alors testez les spécialisations. Mais réalisez que vous ne mettrez jamais autour des aspects de la compilation des modèles. P>