Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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# 如何";Assert.That();列表中的项目是否与NUnit匹配某些条件?_C#_Unit Testing_Nunit_Assert - Fatal编程技术网

C# 如何";Assert.That();列表中的项目是否与NUnit匹配某些条件?

C# 如何";Assert.That();列表中的项目是否与NUnit匹配某些条件?,c#,unit-testing,nunit,assert,C#,Unit Testing,Nunit,Assert,我正在写一些单元测试,想查看一个结果列表 下面是我正在做的一个简单示例: [测试] 公共空隙过滤器某些东西的测试() { List testdata=新列表 { 新MyClass{SomeProperty=“expectedValue”}, 新MyClass{SomeProperty=“expectedValue”}, 新MyClass{SomeProperty=“unexpectedValue”}, 新MyClass{SomeProperty=“unexpectedValue”}, 新MyCl

我正在写一些单元测试,想查看一个结果列表

下面是我正在做的一个简单示例:

[测试]
公共空隙过滤器某些东西的测试()
{
List testdata=新列表
{
新MyClass{SomeProperty=“expectedValue”},
新MyClass{SomeProperty=“expectedValue”},
新MyClass{SomeProperty=“unexpectedValue”},
新MyClass{SomeProperty=“unexpectedValue”},
新MyClass{SomeProperty=null},
}
列表结果=过滤器某物(测试数据);
断言(
其中(r=>r.SomeProperty==“expectedValue”),
正好有(2)项,
“两个项目应与此匹配…”;
}
失败测试的输出:

两项应与此匹配

预期:正好2项

但事实是:没有物品

输出并不能解释什么地方出了问题

说明:我有多个测试的测试数据。这就是为什么我想检查每个测试中的特定项目

我的问题:

是否有方法检查列表中的项目计数并从
NUnit
获取正确的消息

也许像

Assert.That(result, Contains.Exacly(2).Items.Which(i => i.SomeProperty == "expectedValue"))

是的,绝对是!NUnit约束可以链接在一起,以允许您在实际断言方面真正具有很强的描述性。这样做的好处是,当您的测试失败时,您将得到更精确的错误消息——因此,在我看来,在实际的NUnit断言中包含尽可能多的逻辑是一种好的做法

在这种情况下,我相信你可以这样写:

Assert.That(result,
 Contains.Exactly(2).Items.Property(nameof(MyClass.ExpectedProperty)).EqualTo("expectedValue");

是的,绝对是!NUnit约束可以链接在一起,以允许您在实际断言方面真正具有很强的描述性。这样做的好处是,当您的测试失败时,您将得到更精确的错误消息——因此,在我看来,在实际的NUnit断言中包含尽可能多的逻辑是一种好的做法

在这种情况下,我相信你可以这样写:

Assert.That(result,
 Contains.Exactly(2).Items.Property(nameof(MyClass.ExpectedProperty)).EqualTo("expectedValue");

有专门用于此的
匹配的
约束表达式。
这种情况下的用法可能如下所示:

Assert.That(result, 
    Has.Exactly(2).Matches<MyClass>(r => r.SomeProperty == "expectedValue"),
    "Two Items should match this..");
断言(结果), Has.justice(2).Matches(r=>r.SomeProperty==“expectedValue”), “两个项目应与此匹配…”;
有专门用于此的
匹配的
约束表达式。
这种情况下的用法可能如下所示:

Assert.That(result, 
    Has.Exactly(2).Matches<MyClass>(r => r.SomeProperty == "expectedValue"),
    "Two Items should match this..");
断言(结果), Has.justice(2).Matches(r=>r.SomeProperty==“expectedValue”), “两个项目应与此匹配…”;
我认为这是一个基于观点的问题,可以改为(但使用真实的代码)。另外,我要说的是,它的方式很好,也许您可以拉取
result.Where(r=>r.SomeProperty==“expectedVale”)
转换为自己的变量,这样
断言就可以了。最好读懂它,这就是这种格式的全部要点。在有人指出我的谬误之前,另一条评论是:
Assert。之所以使用它,不仅仅是因为它易于阅读。它还允许自定义约束,这在某些情况下很方便。@FeRaaC它不是基于意见的<代码>结果。其中(…)
阻止NUnit了解您想要做什么。我只会告诉你,“一些收藏”应该有更多或更少的项目@Chris写了一个很好的答案:我可以检查
属性
而不是使用
Where()
@kara,如果你澄清你所说的“更好”是什么意思,关于它是基于意见的担忧可能会得到缓解。听起来你的评论中有一些具体的、客观的标准;你能把这句话加到问题上吗?@TylerH好的,你说得对:)“更好”怀疑一个坏问题。我们的目标是从NUnit那里得到一条有意义的断言消息。我修改了这个问题。我认为这是一个基于观点的问题,可以改为(但使用真实代码)。另外,我要说的是,它的方式很好,也许您可以拉取
result.Where(r=>r.SomeProperty==“expectedVale”)
转换为自己的变量,这样
断言就可以了。最好读懂它,这就是这种格式的全部要点。在有人指出我的谬误之前,另一条评论是:
Assert。之所以使用它,不仅仅是因为它易于阅读。它还允许自定义约束,这在某些情况下很方便。@FeRaaC它不是基于意见的<代码>结果。其中(…)
阻止NUnit了解您想要做什么。我只会告诉你,“一些收藏”应该有更多或更少的项目@Chris写了一个很好的答案:我可以检查
属性
而不是使用
Where()
@kara,如果你澄清你所说的“更好”是什么意思,关于它是基于意见的担忧可能会得到缓解。听起来你的评论中有一些具体的、客观的标准;你能把这句话加到问题上吗?@TylerH好的,你说得对:)“更好”怀疑一个坏问题。我们的目标是从NUnit那里得到一条有意义的断言消息。我修改了问题,谢谢
.Property(nameof(MyClass.ExpectedProperty))
就是我要搜索的!谢谢
.Property(nameof(MyClass.ExpectedProperty))
就是我要搜索的!谢谢更适合匹配复杂对象。谢谢。更适合匹配复杂对象。