gpt4 book ai didi

c# - MSTest 将 Mock.Of 列表与 Foo 列表进行比较

转载 作者:行者123 更新时间:2023-11-30 23:05:52 27 4
gpt4 key购买 nike

比较 Moq Foo 列表与预期列表的正确方法是什么

我相信这个问题的答案将与 Moq 对象有关,但我已经尝试了 Assert 的几种变体,得到了相同的一般结果。

        var moq = new List<IFoo>
{
Mock.Of<IFoo>(f => f.Description == "thing one" && f.Price == 0m),
Mock.Of<IFoo>(f => f.Description == "thing two" && f.Price == 0m),
Mock.Of<IFoo>(f => f.Description == "thing three" && f.Price == 0m),
};

var concrete = new List<IFoo>
{
new Foo{ Description = "thing one", Price = 0m},
new Foo{ Description = "thing two", Price = 0m },
new Foo{ Description = "thing three", Price = 0m },
};


//both fail
CollectionAssert.AreEqual(moq, concrete);
CollectionAssert.AreEquivalent(moq, concrete);
}

另外值得注意的是,我正在覆盖 public override bool Equals(object obj)

这是一个失败的测试,代表了我遇到的类似场景。我相信,如果这一切都过去了,那么我要解决的问题也会过去。

我环顾了 SO 以及 Google,可能只是没有使用正确的措辞进行搜索。

最佳答案

基于@Nkosi 的评论和一些额外的挖掘无需对预期列表进行最小起订。只需将列表向下转换为 IFoo 并预填充预期的新 Foo。您可能需要在 IFoo

的具体实例上覆盖 Equals 方法
    var moq = new List<IFoo>
{
new Foo{ Description = "thing one", Price = 0m},
new Foo{ Description = "thing two", Price = 0m },
new Foo{ Description = "thing three", Price = 0m },
};

用这种方法两者都会通过

 CollectionAssert.AreEqual
CollectionAssert.AreEquivalent

值得注意的是,如果我将预期列表保留为最小起订量列表并围绕以下内容交换断言

    CollectionAssert.AreEqual(concrete, moq);//pass
CollectionAssert.AreEquivalent(concrete, moq);//fail

当断言 AreEqual 时,会为预期的对象调用 is equal 方法断言 AreEquivalent 时,将为最小起订量和返回列表调用 equal 方法。

总的来说,我不确定为什么我要 moqing 预期的列表,在这种情况下不需要。

关于c# - MSTest 将 Mock.Of<IFoo> 列表与 Foo 列表进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48550488/

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