Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据Arrange Act Assert范式处理nUnit 3中的多个异常测试?_C#_Exception_Testing_Nunit - Fatal编程技术网

C# 如何根据Arrange Act Assert范式处理nUnit 3中的多个异常测试?

C# 如何根据Arrange Act Assert范式处理nUnit 3中的多个异常测试?,c#,exception,testing,nunit,C#,Exception,Testing,Nunit,在nUnit 3中,进行了相当大的更改,其中的已删除,由断言模型替换 我已经找到了一个示例,但建议改为使用Assert.That(),因此我希望使用如下所示 //Arrange string data = "abcd"; //Act ActualValueDelegate<object> test = () => data.MethodCall(); //Assert Assert.That(test, Throws.TypeOf<ExceptionalException

在nUnit 3中,进行了相当大的更改,其中的已删除,由断言模型替换

我已经找到了一个示例,但建议改为使用Assert.That(),因此我希望使用如下所示

//Arrange
string data = "abcd";
//Act
ActualValueDelegate<object> test = () => data.MethodCall();
//Assert
Assert.That(test, Throws.TypeOf<ExceptionalException>());
//排列
字符串数据=“abcd”;
//表演
ActualValueDelegate测试=()=>data.MethodCall();
//断言
Assert.That(test,Throws.TypeOf());
然而,我想测试断言的一些不同参数,但我似乎无法让它工作。我试过以下方法

List<List<Stuff>> sets = new[] { 0, 1, 2 }
  .Select(_ => Enumerable.Repeat(new Stuff(_), _).ToList())
  .ToList();
Assert.Throws(() => Transform.ToThings(new List<Stuff>()));
List set=new[]{0,1,2}
.Select(=>Enumerable.Repeat(new Stuff(0),0).ToList())
.ToList();
Assert.Throws(()=>Transform.ToThings(newlist());
上面的工作是根据需要创建列表列表,并测试Transform.Stuff()调用。然而,我还没有想出一种方法来将集合插入事物中


可能吗?例子在哪里?(大多数搜索都淹没在nUnit 2.x和官方文档网站上,我看不到任何帮助。)

您应该研究使用属性来定义方法的输入:

[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();
    }
};
[TestCaseSource(“StuffSets”)]
public void to Things_Always_ThrowsException(列表集)
{
//安排
//不管你在这里需要做什么。。。
//表演
ActualValueDelegate测试=()=>Transform.ToThings(集合);
//断言
Assert.That(test,Throws.TypeOf());
}
公共静态IEnumerable填充集=
{
得到
{
返回新[]{0,1,2}
.Select(=>Enumerable.Repeat(new Stuff(0),0).ToList())
.ToList();
}
};

这将为从
StuffSets
返回的每个
列表
调用
ToThings\u Always\u通过一个异常
一次(在这里,三次)。

您应该研究使用该属性定义方法的输入:

[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();
    }
};
[TestCaseSource(“StuffSets”)]
public void to Things_Always_ThrowsException(列表集)
{
//安排
//不管你在这里需要做什么。。。
//表演
ActualValueDelegate测试=()=>Transform.ToThings(集合);
//断言
Assert.That(test,Throws.TypeOf());
}
公共静态IEnumerable填充集=
{
得到
{
返回新[]{0,1,2}
.Select(=>Enumerable.Repeat(new Stuff(0),0).ToList())
.ToList();
}
};

这将为从
StuffSets
返回的每个
列表
调用
ToThings\u Always\u\u通过一个异常
调用一次(这里是三次)。

让我惊讶的是,在test=()=>时,输入不是从括号中引入的。。。相反我是否完全不觉得是lambda表达式应该能够产生转换方法的输入?也许,但这是NUnit团队做出的设计决定;他们选择了
TestCaseSource
ValueSource
,以及其他使用输入参数化测试的方法,而不是在
Assert
上创建API来完成这项工作。答案被接受并+1'ed。不过,我有一个小的跟进。当你说nUnit团队做出了一个设计决策时,你是从环境中推断出来的还是有实际的信息来源?背后的理由是什么?我想强调,我决不怀疑你的说法。我只是好奇。我这么说是因为人们当然可以按照你在问题中描述的方式来实现它,但NUnit团队并不是这样实现的。
TestCaseSource
是在很久以前引入的,我怀疑我是否能在网上找到他们为什么要这么做的任何记录。让我惊讶的是,输入不是从test=()=>的括号中引入的。。。相反我是否完全不觉得是lambda表达式应该能够产生转换方法的输入?也许,但这是NUnit团队做出的设计决定;他们选择了
TestCaseSource
ValueSource
,以及其他使用输入参数化测试的方法,而不是在
Assert
上创建API来完成这项工作。答案被接受并+1'ed。不过,我有一个小的跟进。当你说nUnit团队做出了一个设计决策时,你是从环境中推断出来的还是有实际的信息来源?背后的理由是什么?我想强调,我决不怀疑你的说法。我只是好奇。我这么说是因为人们当然可以按照你在问题中描述的方式来实现它,但NUnit团队并不是这样实现的。
TestCaseSource
是在很久以前引入的,我怀疑我是否能够挖掘到足够的信息来找到他们为什么要走这条路的任何在线记录。