【问题标题】:Nunit Assert List<SomeObject> contains unique valuesNunit Assert List<SomeObject> 包含唯一值
【发布时间】:2014-09-28 04:03:56
【问题描述】:

假设我们有一堂课

class A
{
int num;
string str;
// more methods and data members
}

在一个 nunit 测试中,我们如何在以下行中做一些事情

List<A> listA = GetUniqueValueList();
CollectionAssert.AllItemsAreUnique(listA, "ListA items should be unique.");

据我了解,AllItemsAreUniqe 仅适用于具有值类型的列表。如果说两个 A 对象具有完全相同的成员,则此测试也不会失败。

【问题讨论】:

    标签: c# unit-testing nunit assert assertion


    【解决方案1】:

    平等由您可以覆盖的.Equals() 的实现决定。对于复杂类型,这不会像您设想的那样开箱即用,因此您必须覆盖它以说明您对“平等”的看法。

    【讨论】:

    • 所以你的意思是如果说 a.Num != b.Num ,我会覆盖 A 类中的 Equals 以返回 false ?这行得通吗?
    • 如果我不拥有该课程怎么办?只是好奇。虽然我有权限,但建议不要修改。
    • 有时您还可以指定IEqualityComparer&lt;T&gt;,它的作用类似于外部.Equals() 方法,但AllItemsAreUnique 不提供。如果您不想修改该类,那么您可以围绕它编写一个包装类并在那里实现.Equals() 并使用公共成员,同时将您的类A 作为成员。但这变得相当复杂,收效甚微。理想情况下,每个自定义类都应该有一个 .Equals().GetHashCode() 实现,所以一定要考虑改变你的类 A
    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    相关资源
    最近更新 更多