35903


例えばform1→form2を呼び出すプログラムがあるとします。  
いきなりform2内のコードをチェックする方法はあるのでしょうか？  
ご教授いただければ幸いです。

GUI操作を通さずに  
メソッド内部のデバッグはできないのかと思い質問させていただきました。

今のデバッグの方法は  
例えば、Form2内のあるメソッド内をデバッグしたいとします。

[code]

    //Form1.cs
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f = new Form2(); 
        f.ShowDialog();
        f.Dispose();
    }
    
    
    //Form2.cs
    private void button1_Click(object sender, EventArgs e)
    {
        //この部分からデバッグしたい
    }
    
[/code]

//この部分からデバッグしたい  
↑ここにブレークポイントを貼っておき  
「開始」ボタンを押しbutton1をクリックしてForm2を呼び出し  
Form2に設置してあるボタンを押すことで目的箇所のデバッグが始まります。

そうではなく  
//この部分からデバッグしたい箇所からいきなりデバッグできる方法はないのでしょうか？

//----------  
//追記  
//----------  
単体テストができるというコメントをいただきまして、  
早速Visual Studio Community 2017をダウンロードしました。

[code]

        private void button1_Click(object sender, EventArgs e)
        {
            string test = "test";
        }
    
[/code]

メソッド名上から右クリックで単体テストを呼べるそうなのですが、  
Privateメソッドは難しいのでしょうか？  
private void button1_Clickを中括弧ごと囲んだら単体テストできるようですが、、、

また上記メソッドを単体テストしてみましたが、  
Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException:
'Assert.Fail に失敗しました。'

とエラーが出てしまいました。  
何が原因か教えていただけると助かります。

visual stadio express 2015 (windows10 64bit)


CC BY-SA 3.0
2017-06-26T19:32:18.647
35902
2017-06-27T02:04:54.973
2017-06-27T01:43:03.443
12778
12778
question
c# visual-studio
C#で部分的にテストするには？


UIの操作を伴わないテストを行いたい場合、[単体テスト](https://msdn.microsoft.com/ja-
jp/library/hh694602.aspx)を作成します。Visual Studio組み込みのMSTestがVS2015
Expressで使用できるかどうかは分かりませんが、NUnitやxUnit.netといったフレームワークを使用すれば同等の検証が可能です。

また手動テストのために特定のフォームを即座に表示したいのであれば、[ドライバー](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%96)と呼ばれるプログラムを作成します。これは単純に新しいWindowsフォームアプリケーションを作って問題のフォームを直接、もしくはパラメーターを設定する画面経由で表示するコードを記述すればよいです。

## 追記

どちらの方法でも`public`でないメソッドが呼び出せないことが問題になる場合がありますが、`InternalsVisibleToAttribute`を設定することで一部回避可能です。テスト対象のプロジェクトのProperties/AssemblyInfo.csに

[code]

    [assembly: InternalsVisibleTo("テスト用のプロジェクト名")]
    
[/code]

という記述を追加すると、カスタム属性で指定したアセンブリ―名のプロジェクトからは対象プロジェクトの`internal`なメンバーが参照可能になります。ですので`private`なメソッドを`internal`に変更すれば、外部からテストが可能になります。

[code]

    [TestMethod]
    public void Test1()
    {
        var f = new Form2();
        f.Shown += (_, __) => f.button1_Click(f, EventArgs.Empty);
        f.ShowDialog();
    }
    
[/code]

なお上記のように単に画面を表示してボタンをクリックしたいだけであれば、単体テストよりもドライバーを作成する方が向いています。単体テストは`Assert`クラスの各メソッドに処理結果を渡し、想定と等しいかどうかを検証する用途に使用します。`Assert.Fail()`は必ずテストを失敗させるメソッドですので、VS2017での「エラー」は実装通りの正常な動作です。


CC BY-SA 3.0
2017-06-26T23:40:04.810
35903
2017-06-27T02:04:54.973
2017-06-27T02:04:54.973
5750
5750
35902
answer