1

Factory属性を使用するときに、特定の入力に対して特定の例外が発生することを期待していると書く方法はありますか?Row属性を使用してそれを行う方法は知っていますが、動的に生成されるテスト入力に必要です。

提供された文字列の逆関数を返す関数については、以下のテスト例を参照してください。

[TestFixture]
public class MyTestFixture()
{
   private IEnumerable<object[]> TestData
   {
      get
      {
          yield return new object[] { "MyWord", "droWyM" };
          yield return new object[] { null, null }; // Expected argument exception
          yield return new object[] { "", "" };
          yield return new object[] { "123", "321" };
      }
   }

   [Test, Factory("TestData")]
   public void MyTestMethod(string input, string expectedResult)
   {
      // Test logic here...   
   }
}
4

1 に答える 1

0

ファクトリメソッドからのテストパラメータの行にメタデータ(予期される例外など)を添付するための組み込み機能がないのではないかと思います。

ただし、簡単な解決策は、予期される例外のタイプをテストの通常のパラメーターとして渡し(例外がスローされると予想されない場合はnullAssert.Throws )、テストされたコードをorAssert.DoesNotThrowメソッドで囲むことです。

[TestFixture]
public class MyTestFixture()
{
  private IEnumerable<object[]> TestData
  {
    get
    {
        yield return new object[] { "MyWord", "droWyM", null };
        yield return new object[] { null, null, typeof(ArgumentNullException) };
        yield return new object[] { "", "", null };
        yield return new object[] { "123", "321", null };
    }
  }

  [Test, Factory("TestData")]
  public void MyTestMethod(string input, string expectedResult, Type expectedException)
  {
    RunWithPossibleExpectedException(expectedException, () => 
    {
       // Test logic here... 
    });
  }

  private void RunWithPossibleExpectedException(Type expectedException, Action action)
  {
    if (expectedException == null)
      Assert.DoesNotThrow(action);
    else
      Assert.Throws(expectedException, action);
  }
}

ちなみに、Assert.MayThrowヘルパーメソッドを取り除くために追加のアサーションがあると面白いかもしれません。予期される例外タイプとしてnullを受け入れることができます。ここで機能リクエストを作成するか、パッチを送信することができます。

于 2011-08-01T19:35:58.943 に答える