単体テストの作成にハマる

要約

InternalVisibleToに渡した名前が異なっていた. プロジェクトのプロパティからアセンブリ名を変更した.

VisualStudio2013での単体テストプロジェクトの作成

ここらへんをみる.
リンク先は2015だが大して変わらない.

[ファイル]→[追加]→[新しいプロジェクト]→[Visual C#]→[単体テストプロジェクト]

ここまではよい.

Internal/private属性のメソッドのテストに失敗する

Internal/private属性のメソッドのテストも作りたいなーとなる.当然なる. しかしクラス内にテスト用のメソッドを埋め込むのも避けたい.当然避けたい。
こういった場合C#(.NET?)に便利な機能があり,どうやらProperties内のAssemblyInfo.csに

[assembly: InternalVisibleTo(“XXXXXX”)] // XXXXXXは参照元アセンブリ

と、おまじないを追加すると良いらしい.

しかし追加しても単体テストプロジェクトから なぜかアクセスできない.

( アクセスできない保護レベルになっています )

アセンブリ名はプロジェクト名ではない

結局、アセンブリ名とプロジェクト名を混同していたことが原因だった。

プロジェクトのプロパティ内に アセンブリ の項目がある.
f:id:puyopople:20160412203514p:plain 最初のプロジェクト作成時に適当な名前を付けて,あとからソリューションエクスプローラー内で名前を変更すると,この「アセンブリ名」と「プロジェクト名」に不一致が生じる.
これを直せばちゃんとテストしてくれる.うーん便利。

感想

特にどこにも書かれていなかったので原因の発見まで時間がかかり、辛かった. 仕組みわからないで使うのはよくないね.

念のため

アクセスレベル云々の前に,そもそも参照できない場合,

[ソリューションエクスプローラーでプロジェクトを右クリック] → [追加] → [参照] → [ソリューション] → [プロジェクト]

から参照を追加すれば良い.