2010-11-21 5 views
2

J'essaye d'écrire un test pour vérifier une erreur de compilation. Il s'agit d'attribuer un nombre à une propriété de type Sting. Mais comme il s'agit d'une erreur de compilation, le code de test unitaire ne sera même pas compilé à la première place. Donc, quelqu'un a des suggestions sur la façon de faire cela?Comment écrire un test unitaire pour vérifier l'erreur de compilation?

Je pense que je suis peut-être attribuer le numéro dans l'exécution et vérifiez si certaines exceptions se jeter? Mais je ne suis pas sûr de savoir comment faire cela.

Merci d'avance!

+2

Quelle langue? – cdhowie

+0

Vous pourriez générer un code de sécurité que vous connaissez et qui ne devrait pas compiler et alimenter votre compilateur (via la ligne de commande) et vérifier les résultats de votre test unitaire. Cependant, je suis généralement d'accord avec la réponse d'icyrock.com. – Steven

Répondre

4

Si je vous comprends bien, vous avez un morceau de code qui ne peut pas compiler et que vous voulez écrire le test unitaire qui échoue si le code ne compile pas vraiment. Si tel est le cas, vous ne devriez pas écrire de tests unitaires. Vous devez comprendre que vous devez écrire des tests unitaires uniquement pour votre code, pas le code que quelqu'un d'autre a écrit.

Vous ne précisaient pas le langage de programmation, alors je vais faire quelques pseudo-code. Supposons que vous écrivez une fonction pour ajouter deux nombres:

function add(a, b) { 
    return a + b; 
} 

Très simple. Vous devriez tester cette unité, par ex. en faisant des tests comme le ci-dessous:

function testAdd() { 
    assertEquals(4, add(2, 2)); 
    assertEquals(46, add(12, 34)); 
} 

Cependant, vous devez pas écrire un test qui vérifie si + opérateur fonctionne bien. C'est le travail de quiconque a écrit la bibliothèque qui implémente comment l'opérateur + fonctionne vraiment.

Donc, si tel est le cas, ne pas écrire des tests unitaires. Compiler votre code est le travail de votre compilateur. Le compilateur doit signaler qu'il y a une erreur de compilation d'une manière appropriée. Vous ne devriez pas tester si le compilateur fait son travail correctement - tester c'est le travail des personnes qui écrivent le compilateur.

+0

Je pense que vous avez raison. Merci beaucoup! – Yinan

+0

Pas de problème, heureux d'aider! –

+0

(1) "Vous ne devriez pas tester si le compilateur fait son travail correctement" les spécifications de langage peuvent contenir des détails définis par l'implémentation, et si vous tirez parti de ces détails - il sera cool de le vérifier (2) mécanismes de temps dans votre projet - et potentiellement vous pouvez vouloir le vérifier) ​​ – bruziuz

1

Vous n'avez pas spécifié la langue

  • Ruby, Python - dynamique & forte typesystem. Cela signifie que les types déduisent lors de l'exécution (dynamique), mais les conversions implicites entre les types sont interdits
  • Js, Perl - dynamique & typesystem faible.
  • C++ - système de types statique et fort.

Supposons que nous parlons de C++. De plus je peux créer plus vraiment d'exemple. Imaginez que vous implémentez static assert pour votre projet qui ne pas utiliser C++ 11 compilateur

template <bool> 
struct my_static_assert; 

template <> 
struct my_static_assert<true> {}; 

Si vous voulez vérifier que ce mécanisme fonctionne bien.Vous devez créer unittest fonction qui fait les étapes de suivi:

  1. Créer des fichiers compilateur

  2. Créer processus externe du compilateur et passer unité de test de compilation lui

  3. Attendre la fin du processus de compilation
  4. retrive code de retour du processus de compilation
  5. Votre fonction de contrôle du code de retour de 4.

J'ai vérifié le guide google-test mais il semble qu'ils ne supportent pas un tel concept https://code.google.com/p/googletest/wiki/V1_7_AdvancedGuide

Questions connexes