gpt4 book ai didi

c# - xunit.net 中是否有一种简单的方法可以在不考虑项目顺序的情况下比较两个集合?

转载 作者:可可西里 更新时间:2023-11-01 03:04:44 26 4
gpt4 key购买 nike

在我的一个测试中,我想确保一个集合有特定的项目。因此,我想将此集合与预期集合的项目进行比较,不考虑项目的顺序。目前,我的测试代码看起来有点像这样:

[Fact]
public void SomeTest()
{
// Do something in Arrange and Act phase to obtain a collection
List<int> actual = ...

// Now the important stuff in the Assert phase
var expected = new List<int> { 42, 87, 30 };
Assert.Equal(expected.Count, actual.Count);
foreach (var item in actual)
Assert.True(expected.Contains(item));
}

在 xunit.net 中有没有更简单的方法来实现这一点?我不能使用 Assert.Equal,因为此方法会检查两个集合中项目的顺序是否相同。我查看了 Assert.Collection,但这并没有删除上面代码中的 Assert.Equal(expected.Count, actual.Count) 语句。

最佳答案

xunit.net 的 Brad Wilson 在这个 Github Issue 中告诉我应该使用 LINQ 的 OrderBy 运算符,然后使用 Assert.Equal 来验证两个集合是否包含相同的项而不考虑它们的顺序。当然,您必须在相应的项目类上拥有一个属性,您首先可以将其用于订购(在我的情况下我并没有)。

就我个人而言,我使用 FluentAssertions 解决了这个问题,一个提供大量断言方法的库,可以以流畅的风格应用。当然,there are also a lot of methods that you can use to validate collections .

在我的问题的上下文中,我会使用类似下面的代码:

[Fact]
public void Foo()
{
var first = new[] { 1, 2, 3 };
var second = new[] { 3, 2, 1 };

first.Should().BeEquivalentTo(second);
}

此测试通过,因为 BeEquivalentTo 调用忽略了项目的顺序。

Shouldly如果您不想使用 FluentAssertions,这也是一个不错的选择。

关于c# - xunit.net 中是否有一种简单的方法可以在不考虑项目顺序的情况下比较两个集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28217974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com