質問: "test"; } ``` メソッド名上から右クリックで単体テストを呼べるそうなのですが、 Privateメソッドは難しいのでしょうか? private void button1_Clickを中括弧ごと囲んだら単体テストできるようですが、、、 また上記メソッドを単体テストしてみましたが、 Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException: 'Assert.Fail に失敗しました。' とエラーが出てしまいました。 何が原因か教えていただけると助かります。 visual stadio express 2015 (windows10 64bit)
回答: UIの操作を伴わないテストを行いたい場合、単体テストを作成します。Visual Studio組み込みのMSTestがVS2015 Expressで使用できるかどうかは分かりませんが、NUnitやxUnit.netといったフレームワークを使用すれば同等の検証が可能です。 また手動テストのために特定のフォームを即座に表示したいのであれば、ドライバーと呼ばれるプログラムを作成します。これは単純に新しいWindowsフォームアプリケーションを作って問題のフォームを直接、もしくはパラメーターを設定する画面経由で表示するコードを記述すればよいです。 追記 どちらの方法でも`public`でないメソッドが呼び出せないことが問題になる場合がありますが、`InternalsVisibleToAttribute`を設定することで一部回避可能です。テスト対象のプロジェクトのProperties/AssemblyInfo.csに ``` [assembly: InternalsVisibleTo("テスト用のプロジェクト名")] ``` という記述を追加すると、カスタム属性で指定したアセンブリ―名のプロジェクトからは対象プロジェクトの`internal`なメンバーが参照可能になります。ですので`private`なメソッドを`internal`に変更すれば、外部からテストが可能になります。 ``` [TestMethod] public void Test1() { var f = new Form2(); f.Shown += (_, __) => f.button1_Click(f, EventArgs.Empty); f.ShowDialog(); } ``` なお上記のように単に画面を表示してボタンをクリックしたいだけであれば、単体テストよりもドライバーを作成する方が向いています。単体テストは`Assert`クラスの各メソッドに処理結果を渡し、想定と等しいかどうかを検証する用途に使用します。`Assert.Fail()`は必ずテストを失敗させるメソッドですので、VS2017での「エラー」は実装通りの正常な動作です。