2009-08-25 24 views
5

C#でのJavaのデフォルト(パッケージ)アクセスに相当するものは何ですか? 1つはありますか?とにかく特定の名前空間へのアクセスを制限することはありますか?C#でのJavaのデフォルト(パッケージ)アクセスに相当するものは何ですか?

問題:

私はちょうど私のNUnitのテストに特定のメソッドへのアクセスを制限しようとしている - JUnitの中で私は、メソッドのパッケージへのアクセスを行うと、同じパッケージにテストを持っていることによって、これを行うだろうが、 src/main/javaの代わりにsrc/test/javaの下に置きます。どのように私はC#で同様の何かを達成することができますか?

注:私のテストはNUnitの規約と同じように別のアセンブリになっているので、internalというメソッドを作成することはできません。

答えて

22

C#にはパッケージまたは名前空間レベルのアクセス権がありません - アセンブリレベルのみ - internalアクセスとも呼ばれます。

ただし、メソッドを内部に作成し、InternalsVisibleTo属性を使用してユニットテストアセンブリにそれらを公開することができます。

readこの投稿とthis oneに役立つことがあります。

1

全く同等のものは何もありません。 internalキーワードは近いですが、名前空間ではなくアセンブリによって制限されます。何かが内部でタグ付けされている場合は

、それは、同じアセンブリ内のコードによってアクセスすることができます(DLL、EXE)

+1

...または内部アイテムにアクセスするための明示的なアクセス権がInternalsVisibleToを使用して指定されている他のアセンブリのコードです。 – adrianbanks

0

あなたがそれらを内部作ることによってのみ、そのアセンブリに見えるようにする方法を制限することができ

1

大きく違う別の方法があります。 partial classesは次のように使用できます。

  1. ファイル#1 =テスト中のコードです。通常と同じように書かれていますが、 'partial'キーワードを使用しています。
  2. ファイル#2 =ユニットテスト。実際のユニットテストであるネストされたクラスが含まれています。

ネストされたクラスは、親クラスのすべてのもの(プライベートメソッドを含む)にアクセスできます。ビルドプロセス(MSBuildやNAntスクリプトなど)の一部として、最終アセンブリの一部としてテストをコンパイルしないでください。テスト対象コードは正常に動作します。

関連する問題