【发布时间】:2019-09-30 02:50:11
【问题描述】:
尝试比较具有单个私有字段的对象
像这样的对象:
public struct A
{
private readonly byte[] bytes;
public A(byte[] bytes)
{
this.bytes = bytes;
}
}
这样比较:
var a = new A(new byte[] { 1, 2, 3 });
var b = new A(new byte[] { 1, 2, 3 });
a.Should().BeEquivalentTo(b);
结果:
Message: Expected a to be
A
{
}, but found
A
{
}.
我得到一个肯定的比较,没有覆盖Equals?
【问题讨论】:
-
你不应该断言私人成员。当
bytes不同时,应该有一个公共成员公开行为变化。见stackoverflow.com/a/34586/247702 -
@Stijn ,似乎我有一个模棱两可的情况,对象
A是唯一ID,它是我代码中其他对象的字段。听起来很奇怪,但在所有情况下,我不会将唯一 ID 与其他唯一 ID 进行比较(将其存储在数据库中,如字节数组,通过MyUniqueId.GetByteArray()获取字节数组)。所以看起来我将重载Equals仅用于测试, -
所以
A有一个方法GetByteArray()?如果是这样,您应该为该方法编写一个单元测试,而不是实现Equals()我认为。 -
是的,
A有一个方法GetByteArray(),但是在我的测试中我比较了包含A的对象:class B { public A Id {get;} ... }
标签: c# unit-testing testing tdd fluent-assertions