2017-03-08 1 views
0

J'ai du code écrit en ASM et Byte Buddy et j'ai besoin d'écrire des cas de test pour m'assurer que ces instances ont bien été créées en Runtime.Comment valider et écrire des cas de test pour vérifier Les instances ASM/Byte Buddy ont été créées en exécution

Des idées sur la façon de s'y prendre?

+0

Votre question n'est pas claire. Apparemment, vous générez du code et vous utilisez ce code. Alors, quel est l'obstacle lors du test du code, c'est-à-dire comme n'importe quel autre code? Que voulez-vous dire par "* assurez-vous que ces instances ont bien été créées en runtime *"? Normalement, vous remarquez si c'est arrivé ou non. Si vous ne le remarquez pas, à quoi sert-il de s'assurer que quelque chose se passe, cela n'a aucun effet? La stratégie de test doit se concentrer sur le résultat souhaité, par ex. effet secondaire produit, pas sur les détails techniques comme si une instanciation s'est produite. – Holger

+0

Ce que je voulais dire par la question était un moyen de s'assurer que les objets étaient effectivement générés dans l'exécution. La réponse de Rafael est ce que je cherchais. –

Répondre

1

Je suppose que vous demandez comment valider les classes générées. Comme une inspiration, have a look at Byte Buddy's tests qui bien sûr tester le code généré. Un test simple peut ressembler à ceci:

Class<?> type = new ByteBuddy() 
    .makeInterface() 
    .make() 
    .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER) 
    .getLoaded(); 
assertThat(Modifier.isPublic(type.getModifiers()), is(true)); 
assertThat(type.isEnum(), is(false)); 
assertThat(type.isInterface(), is(true)); 
assertThat(type.isAnnotation(), is(false)); 

Le test ci-dessus valide la création d'une interface. En utilisant l'API de réflexion, vous pouvez interagir avec la classe générée après sa création. Octet Buddy offre la stratégie ClassLoadingStrategy.Default.WRAPPER pour isoler le code généré. De cette façon, Byte Buddy a généré un nouveau chargeur de classe pour la classe et les tests unitaires restent reproductibles. Ce ne serait pas le cas si une classe était chargée dans un chargeur de classe existant comme le chargeur de classe système.