带有ExpectedException的Mbunit Factory属性

时间:2011-08-01 17:26:59

标签: c# unit-testing factory mbunit expected-exception

当我使用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...   
   }
}

1 个答案:

答案 0 :(得分:0)

我担心没有内置功能可以将元数据(例如预期的异常)附加到来自工厂方法的一行测试参数。

但是,一个简单的解决方案是将预期异常的类型作为测试常规参数传递(如果不期望抛出异常,则 null )并将测试的代码括在{{ 1}}或Assert.Throws方法。

Assert.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); } } 断言来摆脱辅助方法可能会很有趣。它可以接受 null 作为预期的异常类型。也许您可以创建功能请求here,或者您可以提交补丁。