以下、記憶で書いているので、用語や名称に誤りがあるかも知れませんがご容赦ください。
###状況
・VS2015 で作成したプロジェクトの単体試験を行うため、VS の MsTest を利用しようとしています。
① テスト用のプロジェクトから試験対象のプロジェクトを参照に加えます
② プロジェクトエクスプローラの参照ツリーの下に表示される対象プロジェクト名を右クリックして Fakes の作成を選びます
③ ビルドが走って終了すると、出力タブに一部の Fakes の作成に失敗したと警告メッセージが表示されます
④ テストプロジェクト内で Fakes を利用しようとしてもインテリセンスに表示されません
※全部が表示されないわけではなく、表示されるクラス?等もあります
ビルドを行って生じるエラー・警告は以下の通りです。
◆ ③で表示される出力
1>------ すべてのリビルド開始: プロジェクト:target, 構成:Debug Any CPU ------
1> target -> <フォルダ>\test\target\bin\Debug\target.dll
2>------ すべてのリビルド開始: プロジェクト:test, 構成:Debug Any CPU ------
2><フォルダ>\test\Fakes\target.fakes : warning : 一部の Fakes を生成できませんでした。詳細を確認するには、このファイルの Fakes 要素の Diagnostic 属性を 'true' に設定し、プロジェクトをリビルドしてください。
2> test -> <フォルダ>\test\bin\Debug\test.dll
========== すべてリビルド: 2 正常終了、0 失敗、0 スキップ ==========
◆ 上の指示に従って修正した後にビルドした際に表示される出力
1>------ すべてのリビルド開始: プロジェクト:target, 構成:Debug Any CPU ------
1> target -> <フォルダ>\test\target\bin\Debug\target.dll
2>------ すべてのリビルド開始: プロジェクト:test, 構成:Debug Any CPU ------
2><フォルダ>\test\Fakes\target.fakes : warning : target.Interface1 の shim を生成できません: 型はインターフェイスです。
2> test -> <フォルダ>\test\bin\Debug\test.dll
========== すべてリビルド: 2 正常終了、0 失敗、0 スキップ ==========
###再現方法
① 新規にソリューションを作成します
② 上記のソリューションにライブラリプロジェクト1(テスト用)を追加します
③ 上記のソリューションにライブラリプロジェクト2(テスト対象)を追加します
④ プロジェクト1に2への参照を加えます
⑤ プロジェクト1のオブジェクトツリーで2への参照で Fakes の作成を選びます
※ この時点では Fakes の作成に成功します
⑥ プロジェクト2に interface (ファイル)を追加します
⑦ ソリューションをリビルドします
※ この時点で警告メッセージが表示されるようになります
※ 上の「状況」に書いたプロジェクトでも、interface を削除すると Fakes が作れるようになります
つまり、少なくとも自分のやり方ではテスト対象のプロジェクト内に interface の定義があると Fakes が作成できなくなるようです。
###質問のまとめ
一般に interface があるとテストできなくなるとは思えないので、自分の手順に誤りがあるか、他に設定が必要なのだと思います。
interface の定義を含んだプロジェクトで Fakes を使えるようにする方法をご存じであれば教えてください。
あなたの回答
tips
プレビュー