我在C#中有许多方法可以返回我希望测试的各种集合。 我想尽可能少地使用测试API - 性能并不重要。 一个典型的例子是:

HashSet<string> actualSet = MyCreateSet();
string[] expectedArray = new string[]{"a", "c", "b"};
MyAssertAreEqual(expectedArray, actualSet);

// ...

void MyAssertAreEqual(string[] expected, HashSet<string> actual)
{
    HashSet<string> expectedSet = new HashSet<string>();
    foreach {string e in expected)
    {
        expectedSet.Add(e);
    }
    Assert.IsTrue(expectedSet.Equals(actualSet));
}

我必须根据集合是否是数组,列表,ICollections等来编写许多签名。是否存在简化此操作的转换(例如,将数组转换为Set?)。

我还需要为自己的课程这样做。 我已经为他们实现了HashCode和Equals。 它们(主要)是(比如)MySuperClass的子类。 是否可以实现该功能:

void MyAssertAreEqual(IEnumerable<MySuperClass> expected, 
                      IEnumerable<MySuperClass> actual); 

这样我可以打电话:

IEnumerable<MyClassA> expected = ...;
IEnumerable<MyClassA> actual = ...; 
MyAssertAreEqual(expected, actual); 

而不是为每个班级写这个

===============>>#1 票数:8 已采纳

NUnit和MSTest(可能还有其他的)都有一个CollectionAssert类

===============>>#2 票数:4

如果您使用的是.NET 3.5,则可以使用Enumerable.SequenceEqual方法。

Assert.IsTrue(seqA.SequenceEqual(seqB));

如果只关心元素相等而不是顺序,则应在调用SequenceEqual之前在两个序列上使用OrderBy。

===============>>#3 票数:0

您是否尝试过使用NUnit附带的CollectionAssert

它对两个集合断言并比较集合中的项目

  ask by peter.murray.rust translate from so

未解决问题?本站智能推荐:

2回复

如何在单元测试中声明字典

你知道我怎样断言两个类型的字典 在我的单元测试项目中? 我尝试了CollectionsAssert,但对我没有用。我想这需要简单的Dictionary作为参数(例如Dictionary<string,string> )。我想对我来说问题出在字典的第二个参数上。知道如何断
2回复

如何对集合的保存进行单元测试

我正在尝试为将多个记录保存到数据库中的方法编写单元测试。 该方法传递一个集合参数。 该方法循环遍历该集合。 设置与该对象关联的用户标识,并在数据库中更新记录。 这是为集合中的每个对象完成的。 关于如何创建单元测试除了写入数据库之外的任何想法。 谢谢,
2回复

比较两个在单元测试中的列表

我有两个列表,其中包含两个User对象。 列表内的对象的值相同。 但是当我检查此列表时,单元测试返回CollectionAssert.AreEqual失败。 (索引为0的元素不匹配)。 我认为CollectionAssert.AreEqual方法不检查列表的值,而是检查引用。
7回复

单元测试 - 我做得对吗?

基本上我已经编程了一段时间,在完成我的上一个项目之后可以完全理解如果我做完TDD会有多容易。 我想我仍然没有严格执行,因为我仍然在编写代码,然后为它编写测试,如果你不知道什么结构以及你的存储数据等,我不太清楚测试在代码之前的变化... 但无论如何... 有点难以解释,但基本上可以说例如我
3回复

Xunit.Assert.Collection中的问题-C#

我有一个类库,它包含以下模型和方法 模型: 方法: 我有一种测试方法 我收到异常消息 我的要求是检查所有项目。 items.Name应包含子字符串“ John”。 请协助我如何使用Xunit.Assert.Collection进行检查
2回复

测试集合是否包含基于特定属性的对象

我正在使用NUnit 2.5.7。 我想测试一个特定类的自定义对象的集合是否包含某些对象,基于类的属性之一。 例如一个人为的例子...... 虽然在这个例子中它很简单,但我不想为每个Person创建模拟对象并在断言中使用它们......我只想根据特定属性(本例中的Name)进行检
1回复

C#比较列表列表

使用Microsoft.VisualStudio.TestTools.UnitTesting; 我想要通用测试方法,该方法获取Dictionary和function,然后检查Value和function(Key)之间的每个字典条目是否相等: 但是如果Values(和函数的返回值)是
2回复

如何使用流利断言来断言集合中的所有项目?

假设我想测试使用fluent-assertions返回一堆以下类型的项的方法,以确保所有项的IsActive -flag设置为true : 为此,我可以简单地遍历集合并在foreach循环中分别声明每个项目: 但是,有没有一种更流畅的方法可以一次声明整个集合中的每个项目呢?
1回复

如何填充接口的只读集合

我有一项必须完成的任务,需要通过以下单元测试(无法修改)才能通过。 尽管执行的次数不多,但JarOfSweetsCreator具有以下代码: IJarOfSweets具有以下功能: 我需要通过从IJarOfSweets创建并计数30来使测试通过。 如果您只能拥有一个接口
4回复

如何测试IEnumerable

在测试中我需要测试一个对象: 该集合包含数字1,2和3。 我基本上想测试一下ID中有三个ID,而且1,2和3都存在。 问题是IEnumerable没有计数。 我以为我能够去: 任何人都知道如何做到这一点以及如何确保1,2和3是那里的实际数字?