如何根据Arrange-Act-Assert范例在nUnit 3中处理多个异常测试?

时间:2016-09-23 12:29:54

标签: c# exception testing nunit

在nUnit 3中,进行了相当多的更改,其中 ExpectedException 已被删除以被断言模型替换。

我找到了thisthis示例,但建议使用 Assert.That(),所以我想使用this approach,如图所示下方。

//Arrange
string data = "abcd";
//Act
ActualValueDelegate<object> test = () => data.MethodCall();
//Assert
Assert.That(test, Throws.TypeOf<ExceptionalException>());

但是,我想测试一些不同参数的断言,但我似乎无法让它工作。我尝试了以下内容。

List<List<Stuff>> sets = new[] { 0, 1, 2 }
  .Select(_ => Enumerable.Repeat(new Stuff(_), _).ToList())
  .ToList();
Assert.Throws(() => Transform.ToThings(new List<Stuff>()));

以上工作原理是根据需要创建列表列表并测试 Transform.Stuff()调用。但是,我还没有找到一种方法设置插入

有可能吗?示例在哪里? (大多数搜索都淹没在nUnit 2.x和官方文档站点上,我认为没有什么可以帮助我。)

1 个答案:

答案 0 :(得分:3)

您应该考虑使用TestCaseSource属性来定义方法的输入:

[TestCaseSource("StuffSets")]
public void ToThings_Always_ThrowsAnException(List<Stuff> set)
{
    // Arrange
    // Whatever you need to do here...

    // Act
    ActualValueDelegate<object> test = () => Transform.ToThings(set);

    // Assert
    Assert.That(test, Throws.TypeOf<SomeKindOfException>());
}

public static IEnumerable<List<Stuff>> StuffSets = 
{
    get 
    {
        return new[] { 0, 1, 2 }
            .Select(_ => Enumerable.Repeat(new Stuff(_), _).ToList())
            .ToList();
    }
};

对于从ToThings_Always_ThrowsAnException(此处,三次)返回的每个List<Stuff>,这将调用StuffSets一次。