Frage Was entspricht dem Standardzugriff (Paket) von Java in C #?


Was entspricht dem Standardzugriff (Paket) von Java in C #? Ist dort eines? Gibt es einen Zugriff auf einen bestimmten Namespace?

Das Problem:

Ich versuche, den Zugriff auf bestimmte Methoden auf nur meine NUnit-Tests zu beschränken - in JUnit würde ich dies tun, indem ich das Methodenpaket zugänglich mache und den Test im selben Paket habe, aber unter src / test / java statt src / main / java . Wie kann ich etwas ähnliches in C # erreichen?

Hinweis: Ich kann die Methoden nicht erstellen internal weil meine Tests in einer separaten Baugruppe sind - wie es die NUnit-Konvention ist - oder?


6
2017-08-25 18:31


Ursprung


Antworten:


C # hat keinen Zugriff auf Paket- oder Namespace-Ebene - nur Assembly-Ebene -, die auch als intern Zugriff.

Sie können jedoch Ihre Methoden intern und verwenden Sie die InternalsVisibleTo Attribut, um sie Ihrer Komponententestbaugruppe verfügbar zu machen.

Vielleicht finden Sie es nützlich lesen dieser Beitrag und dieses.


22
2017-08-25 18:34



Es gibt nichts, was genau entspricht. Das intern Das Schlüsselwort ist geschlossen, wird jedoch von der Assembly und nicht vom Namespace begrenzt.

Wenn etwas mit internal markiert ist, kann nur auf Code innerhalb derselben Assembly zugegriffen werden (dll, exe)


1
2017-08-25 18:34



Es gibt einen anderen Weg, der ganz anders ist. Sie können verwenden Teilklassen so:

  1. Datei # 1 = Code im Test. Wie normal geschrieben, aber mit dem Schlüsselwort "teilweise"
  2. Datei # 2 = Komponententest, enthält eine verschachtelte Klasse, die den eigentlichen Komponententest darstellt.

Geschachtelte Klassen haben Zugriff auf alles in ihrer Elternklasse (einschließlich privater Methoden). Als Teil Ihres Build-Prozesses (vielleicht MSBuild- oder NAnt-Skripte) kompilieren Sie die Tests nicht als Teil der endgültigen Assembly, und der getestete Code wird problemlos funktionieren.


1
2017-08-25 18:43



Sie können die Methoden so einschränken, dass sie nur in der Assembly sichtbar sind, indem Sie sie intern machen


0
2017-08-25 18:36