2010-12-29 10 views
1

Ich arbeite an Komponententests für mein Projekt. DLL mit Business-Logik sollte für .Net 2.0 gebaut werden, aber ich möchte Moq zum Testen verwenden (erfordert. NET 3.5). Aus diesem Grund habe ich alle Tests auf separate .NET 3.5-Projekt mit Bezug auf Business-Logik-Projekt verschoben. Ich muss einige Methoden testen, die von meinem Testprojekt als intern markiert sind. Ich kann die einzige Möglichkeit sehen, zu tun, dass separate Build-Konfigurationen mit bedingten Build Symbolen:Machen Sie die Methode public für UNITTESTS Build-Konfiguration

#if UNITTESTS 
public 
#else 
internal 
#endif 
int DoSomeAction(int param1, int param2) 
{ 
    // some logic that need to be tested here 
} 

aber eine solche Art von Code sieht hässlich aus. Vielleicht gibt es einen besseren Weg, wie Mark-Methode durch ein spezielles Attribut:

[ConditionalPublic("UNITTESTS")] 
internal int DoSomeAction(int param1, int param2) 
{ 
    // some logic that need to be tested here 
} 

Vielen Dank.

Antwort

7

können Sie das Attribut hinzufügen

[assembly: InternalsVisibleTo("ProjectName.Tests")] 

(es von System.Runtime.CompilerServices kommt) zu Ihrem Projekt assembly.cs. Jetzt kann Ihr Testprojekt auf Interna zugreifen.

HTH

+0

Oh, das ist was ich suche! Vielen Dank! –

0

Ich möchte nicht private Methoden testen. Privat bedeutet, dass nur die deklarierende Klasse etwas über sie wissen muss, nicht einmal der Komponententest sollte darauf zugreifen können. Es bietet Ihnen den Vorteil, dass Sie die privaten Teile immer neu gestalten können, und keine anderen Klassen, nicht einmal Komponententests müssen geändert werden. Testen Sie nur die öffentlichen Methoden, sie werden die privaten Methoden auch indirekt testen. Das ist meine Meinung.

+0

Aber Interna sind öffentlich, wenn auch nur für die lokale Versammlung. – Simone

+0

Meiner Meinung nach sollte Unit-Testing jedoch aus der Perspektive eines Außenseiters sein (der zufällig einige Interna kennt, um eine gute Abdeckung zu erreichen). Sie müssen öffentliche Methoden testen. Und wenn Sie das richtig machen, müssen Sie nicht-öffentliche Tests nicht durchführen. – fejesjoco

+0

Ich kann Ihnen nicht zustimmen - bei Unit-Tests geht es nicht um Black-Box-Tests. –

Verwandte Themen