摘要:在使用Fluent声明编写单元测试时,遇到了几个我在下面详细描述的问题。如果您需要我提供任何其他信息,请告诉我,但我不确定这是否确实是预期的行为,或者我误解了某些内容。ShouldBeEquivalentTo导致对象引用未设置ExcludeMissingProperties的异常/定义
问题1是一个对象引用未设置为我正在观察的实例异常。问题2与ExcludeMissingProperties的定义方式相比似乎是意想不到的行为。
对于我下面的问题,我使用下面的示例类来帮助演示我正在谈论的问题。
public class B
{
public string Name { get; set; }
public int Id { get; set; }
}
internal class BTo
{
internal int Id { get; set; }
}
public class C
{
public int ID { get; set; }
public B B { get; set; }
}
问题1:对象没有设置到一个实例异常时,期望不具有复杂的类型属性集。
a。如果期望的对象(期望)没有设置复杂的类型属性,并且实际的(主题)确实,则对象引用未设置为抛出实例错误。这对于简单对象可能没有问题,但在DTO嵌套严重的实际测试场景中,很难找到导致异常的原因。
b。与此异常相关的是,如果我们可以抛出导致异常的属性名称,它将非常有用。我知道这是一个未处理的情况。
样品测试:
var expected = new C
{
ID = 1,
};
var actual = new C
{
ID = 1,
B = new B
{
Id = 1,
Name = "name"
}
};
actual.ShouldBeEquivalentTo(expected, expr => expr.ExcludingMissingProperties());
问题2:ExcludingMissingProperties 的定义,我不得不写很多代码来解决默认行为。
对于我的很多测试用例,我不想设置期望属性;例如:数据库插入的情况下,我想检查一个主键是否生成(所以值不应该默认是一个足够的情况),但我不在乎什么值。同样,还有其他噪音属性与我的测试用例无关。
所以这个失败:
var expected = new B { Name = "somevalue"};
var actual = new B { Id = 1, Name = "somevalue" };
actual.ShouldBeEquivalentTo(expected, x => x.ExcludingMissingProperties());
这传递:
var expected = new BTo { Id = 1};
var actual = new B { Id = 1, Name = "somevalue" };
actual.ShouldBeEquivalentTo(expected, e => e.ExcludingMissingProperties());
我的答案解决了您的问题吗? –