【问题标题】:Unit Test failing when comparing two ILists比较两个列表时单元测试失败
【发布时间】:2013-07-08 14:31:25
【问题描述】:

我正在运行一些 TestMethods 测试 JSON 序列化程序的实现,并在比较序列化 \ 反序列化之前和之后的两个 IList 对象时,但比较失败。

型号

public class BusinessModel
{
    public int ID { get; set; }
    public string Name { get; set; }
}

测试

IList<BusinessModel> model = new List<BusinessModel>
{
    new BusinessModel { ID = 1, Name = "Test1" },
    new BusinessModel { ID = 2, Name = "Test2" },
    new BusinessModel { ID = 3, Name = "Test3" },
    new BusinessModel { ID = 4, Name = "Test4" }
};

[TestMethod]
public async Task TestSerialiseDeserialiseIsEqual()
{
    ISerialiser serialiser = new Serialiser();

    IList<BusinessModel> deserialisedModel;
    string serialised = string.Empty;

    serialised = await serialiser.SerialiseAsync<IList<BusinessModel>>(model);
    deserialisedModel = await serialiser.DeserialiseAsync<IList<BusinessModel>>(serialised);

    Assert.IsTrue(model.SequenceEqual(deserialisedModel));
}

结果

我在this 帖子中尝试了一些详细的测试方法,但都失败了。

Assert.AreEqual(t1.Count(), t2.Count());

IEnumerator<Token> e1 = t1.GetEnumerator();
IEnumerator<Token> e2 = t2.GetEnumerator();

while (e1.MoveNext() && e2.MoveNext())
{
    Assert.AreEqual(e1.Current, e2.Current);
}

通过集合计数项目,但在第一个对象比较时失败。

Assert.IsTrue(model.SequenceEqual(deserialisedModel));

Assert.IsTrue failed 失败

CollectionAssert.AreEqual(model.ToArray(),deserialisedModel.ToArray())

Collection.AreEqual failed (Element at index 0 do not match) 失败

CollectionAssert.AreEquivalent(model.ToArray(),deserialisedModel.ToArray())

{"CollectionAssert.AreEquivalent failed. The expected collection contains 1 occurrence(s) of &lt;Helper.Tests.Serialisation.BusinessModel&gt;. The actual collection contains 0 occurrence(s). "} 失败

通过检查它们看起来相同的对象

原创

反序列化对象

问题

比较 IList 对象以进行单元测试的最佳方法是什么?为什么我的测试失败了?

【问题讨论】:

    标签: c# .net unit-testing ilist


    【解决方案1】:

    您需要为您的BusinessModel 类定义EqualsGetHashCode。默认的Equals 实现是引用相等,两个列表中的项目的对象引用会不同。

    或者,您可以创建一个IEqualityComparer&lt;BusinessModel&gt;,它定义相等/哈希码并将其传递给SequenceEquals

    【讨论】:

    • 谢谢李。覆盖 Equals 和 GetHashCode 方法解决了问题
    猜你喜欢
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多