0

摘要:在使用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()); 

回答

0

1期已经在即将到来的3.0版已经解决了(现在处于alpha),并造成由一个null对象。
问题2可以通过使用Excluding方法使用指向要排除的属性的属性路径表达式来解决。如果不能使用该表达式,则也可以使用Excluding的重载作为Func<ISubjectInfo, bool>

+0

我的答案解决了您的问题吗? –

相关问题