Au fil des flows

18jan/125

InternalsVisibleTo, votre meilleur ami pour tester les methodes internes

J'arrive avec 4 ans de retard. Jusqu'à présent, j'ai toujours pu en C# tester plus ou moins le code de mes projets.
Seulement, pour me simplifier la vie, je déclarai la plupart de mes classes public. En terme d'encapsulation, vous en conviendrez c'est très moyen.

Aujourd'hui, j'ai rencontré le cas différent. L'assembly possède des classes qui ne doit pas être publique. Cependant je doit tout de même les tester.

Pour résoudre ce problème, j'ai découvert l'attribut InternalVisibleTo. Il permet de rendre accessible les methodes internes d'un assembly à un autre assembly. Ca ressemble beaucoup au mot clée friend en C++, qui s'applique lui aux classes. Pourquoi 4 ans de retard ? Tout simplement car cet attribut existe depuis dotNet 2.0.

Comment l'employer ?

En C#, vous pouvez placer ce fichier dans AssemblyInfo.cs. Voila ce que ça donne pour le programme ImageAnalyzer. Je veux que les methodes internes soient accessibles à l'assembly ImageAnalyzerTests.

[assembly: InternalsVisibleTo("ImageAnalyzerTests")]

Mais si quelqu'un appelle son assembly ImageAnalyzerTests ?

Effectivement, il pourra employer les methodes internes. Ue petite astuce. Vous pouvez executer vos tests unitaires en mode DEBUG.

Quand vous compilez en release, l'ouverture des methodes internes ne sera pas faite. Vous pouvez utiliser votre propre directive de compilation mais ça c'est une autre histoire.

#if DEBUG
    [assembly: InternalsVisibleTo("ImageAnalyzerTests")]
#endif

Voici 2 captures d'écran montrant les 2 scénarios.

InternalsVisibleTo Debug
InternalsVisibleTo Release

L'assembly de tests compilé ne peut plus atteindre les methodes de ImageAnalyzer compilé en Release

Autre point, vous pouvez aussi signer votre assembly et en tenir compte dans la declaration InternalsVisibleTo. Je vous renvoie à la MSDN pour plus de détails.

Posted by Fabien Arcellier

Remplis sous: Non classé Laisser un commentaire
Commentaires (5) Trackbacks (0)
  1. Hey juѕt wanted tօ give you a գuick heads up. The words in your article seem too be running
    off thᥱ screen in Firefox. I’m not surе if thіs is ɑ format iѕsue or something to dɗo with web Ьrowser compatibility but I figured I’d post to let you know.
    The layout look great though! Hope you get the issue solved ѕoon. Cheers

  2. Excellent web sitee you have here.. It?s hard to find good quality
    writing like yours nowadays. I really appreciate peoploe like you!
    Take care!!

  3. Ηi, i feel that i saw you visited my web site so i ցot here to return the favor?.I’m trying to to find issues to
    imρrove my webѕite!I suppose its good еnough tⲟ use some
    off yⲟur ideas!!

  4. This is a ցreat tip pwrticularly to those new to thhe
    Ƅlogosphere. Brіef but very precise info… Maany thanks for
    sharung this one. A must read post!


Leave a comment

Aucun trackbacks pour l'instant