2016-10-13 7 views
1

MSDNのアクションとラムダ式については読んでいますが、まだ紛失しているものがあります。私は次のパブリッククラスを持っています。アクションとラムダを使ったNUnitテスト

public class ExitChecker 
{ 
    public Action EnvironmentExitAction { get; set; } 

    public ExitChecker(string[] args) 
    { 
     if (string.Compare(args[0], "-help", true) == 0) 
     { 
      EnvironmentExitAction =() => Environment.Exit(0); 
     } 
    } 
} 

私は次のテストクラスを持っています。

[TestFixture] 
public class AVSRunnerConsoleAppTests 
{ 
    [Test] 
    public void TestConsoleAppWithHelpArg() 
    { 
     string[] args = new string[1] { "-help" };   
     ExitChecker exitchecker = new ExitChecker(args); 

     bool exitZeroOccured = false; 
     exitchecker.EnvironmentExitAction =() => exitZeroOccured = true; 

     Assert.That(exitZeroOccured, Is.True); 
    } 
} 

実際にEnvironment.Exitを呼び出さずにEnvironment.Exitをテストしようとしています。すべてコンパイルしてうまく動作するようですが、Lambda式のexitZeroOccuredをtrueに変更することはできません。誰かが私を正しい方向に向けることができますか?

答えて

1

あなたは決してEnvironmentExitActionを呼び出しません。コードを次のように変更してください。

[Test] 
public void TestConsoleAppWithHelpArg() 
{ 
    string[] args = new string[1] { "-help" }; 
    ExitChecker exitchecker = new ExitChecker(args); 

    bool exitZeroOccured = false; 
    exitchecker.EnvironmentExitAction =() => exitZeroOccured = true; 

    exitchecker.EnvironmentExitAction.Invoke(); 

    Assert.That(exitZeroOccured, Is.True); 
} 
+0

ワウ私はそれを逃したとは信じられません。もう少し読書をするためにオフ...束に感謝。私は実際にラムダ式自体でInvokeが起こったと考えました。 – cbohannon

+0

Pff、心配しないで...私はいつもそうしています。正直言って、あなたのテストは本当に何もしていません。あなたは 'Action'を呼び出すことをテストしています。これは明らかに.NETクラスなので実行します。テストされたコードの全体としての 'Environment.Exit(0);'コードはテスト自体に存在しません。 – Brandon

+0

ハ!真実。私はいくつかの異なるテストオプションを試してきました。 Environment.Exit(0)はテストを殺し、おそらくテストするべきものではありませんが、試してみると思いました。 – cbohannon

関連する問題