2013-01-02 6 views
8

testdelegateまたはdelegateを受け取り、パラメータを委譲オブジェクトに渡すメソッドを作成しようとしています。これは、すべてが同じパラメータ(ID)を取り、すべてのコントローラメソッドのテストを作成したくないコントローラのメソッドのテストを作成するためです。NUnitのTestDelegateにパラメータを渡す

コード私が持っている:

protected void AssertThrows_NullReference_Og_InvalidOperation(TestDelegate delegateMethod) 
{ 

    Assert.Throws<NullReferenceException>(delegateMethod); 
    Assert.Throws<InvalidOperationException>(delegateMethod); 
    Assert.Throws<InvalidOperationException>(delegateMethod); 
} 

私がやりたいこと:

protected void AssertThrows_NullReference_Og_InvalidOperation(TestDelegate delegateMethod) 
{ 

    Assert.Throws<NullReferenceException>(delegateMethod(null)); 
    Assert.Throws<InvalidOperationException>(delegateMethod(string.Empty)); 
    Assert.Throws<InvalidOperationException>(delegateMethod(" ")); 
} 

EDIT: 私は、コントローラは、戻り値を持っていることを言及するのを忘れてしまいました。したがって、アクションは使用できません。

+0

私の更新の答え –

+1

あなたは正しいですを参照してください。私はあなたのコードを借りていくつかの調整を行った、私の独自のソリューションを底に追加しました。ご協力いただきありがとうございます。 –

答えて

10

Action<string>を使用すると、単一文字列パラメータを受け入れるメソッドを渡すことができます。テストパラメータでそのアクションを起動します。

protected void AssertThrowsNullReferenceOrInvalidOperation(Action<string> action) 
{ 
    Assert.Throws<NullReferenceException>(() => action(null)); 
    Assert.Throws<InvalidOperationException>(() => action(String.Empty)); 
    Assert.Throws<InvalidOperationException>(() => action(" ")); 
} 

使用法:

[Test] 
public void Test1() 
{ 
    var controller = new FooController(); 
    AssertThrowsNullReferenceOrInvalidOperation(controller.ActionName); 
} 

UPDATE:のActionResultを返すコントローラの

使用Func<string, ActionResult>。また、その目的のために汎用メソッドを作成することもできます。

1

編集で述べたように、コントローラには戻り値の型があります。したがって、私はActionからFuncに変更しなければなりませんでした。ユニットテストで使用したので、関数を保持する一時オブジェクトを作成する必要がありました。ここlazyberezovskyの答えに基づいて

は私の結果のコードです:

public class BaseClass 
    { 
      protected Func<string, ActionResult> tempFunction; 
      public virtual void AssertThrowsNullReferenceOrInvalidOperation() 
      { 
       if (tempFunction != null) 
       { 
        Assert.Throws<NullReferenceException>(() => tempFunction(null)); 
        Assert.Throws<InvalidOperationException>(() => tempFunction(string.Empty)); 
        Assert.Throws<InvalidOperationException>(() => tempFunction(" ")); 
       } 
      } 
    } 

ユニットテスト、その後です:

[TestFixture] 
public class TestClass 
{ 
     [Test] 
     public override void AssertThrowsNullReferenceOrInvalidOperation() 
     { 
      tempFunction = Controller.TestMethod; 
      base.AssertThrowsNullReferenceOrInvalidOperation(); 
     } 
} 
関連する問題