最小起订量比较不一致
Moq Comparison is inconsistent
我正在使用 Moq 框架进行模拟。我发现 Equals override 没有按预期工作的问题。似乎动态对象中必须有一个始终 returns false 的覆盖。这是一些示例代码。我正在使用 nuget 的最小起订量版本 4.2.1507.0118。
public class B
{
public override bool Equals(object obj)
{
return base.Equals(obj);
}
}
class Program
{
static void Main(string[] args)
{
var a = new Moq.Mock<B>().Object;
var b = a;
bool equalsOperator = a == b; //returns true
bool referenceEquals = object.ReferenceEquals(a, b); //returns true
bool equals_b = a.Equals(b); //returns false
bool equals_a = a.Equals(a); //returns false
}
}
另一件有趣的事情是,如果在 Equals 覆盖上放置断点,它永远不会命中。 Moq 框架是否有错误,或者我做错了什么?
要解决此问题,您必须将最小起订量的 CallBase
属性 设置为 true,该设置将确保您正在调用基本实现或其重写方法。
var a = new Moq.Mock<B>().Object;
将此更改为
var a = new Moq.Mock<B>() { CallBase = true }.Object;
来自Moq Quickstart(强调已添加):
Make mock behave like a "true Mock", raising exceptions for anything that doesn't have a corresponding expectation: in Moq slang a "Strict" mock; default behavior is "Loose" mock, which never throws and returns default values or empty arrays, enumerables, etc. if no expectation is set for a member
因此,您将得到 false
,布尔值的 default value。
我正在使用 Moq 框架进行模拟。我发现 Equals override 没有按预期工作的问题。似乎动态对象中必须有一个始终 returns false 的覆盖。这是一些示例代码。我正在使用 nuget 的最小起订量版本 4.2.1507.0118。
public class B
{
public override bool Equals(object obj)
{
return base.Equals(obj);
}
}
class Program
{
static void Main(string[] args)
{
var a = new Moq.Mock<B>().Object;
var b = a;
bool equalsOperator = a == b; //returns true
bool referenceEquals = object.ReferenceEquals(a, b); //returns true
bool equals_b = a.Equals(b); //returns false
bool equals_a = a.Equals(a); //returns false
}
}
另一件有趣的事情是,如果在 Equals 覆盖上放置断点,它永远不会命中。 Moq 框架是否有错误,或者我做错了什么?
要解决此问题,您必须将最小起订量的 CallBase
属性 设置为 true,该设置将确保您正在调用基本实现或其重写方法。
var a = new Moq.Mock<B>().Object;
将此更改为
var a = new Moq.Mock<B>() { CallBase = true }.Object;
来自Moq Quickstart(强调已添加):
Make mock behave like a "true Mock", raising exceptions for anything that doesn't have a corresponding expectation: in Moq slang a "Strict" mock; default behavior is "Loose" mock, which never throws and returns default values or empty arrays, enumerables, etc. if no expectation is set for a member
因此,您将得到 false
,布尔值的 default value。