【发布时间】:2013-12-19 17:38:24
【问题描述】:
我有以下情况,不胜感激。
public class Poco
{
public string SomeData { get;set; }
public string SomeMoreData { get;set; }
}
public class Worker
{
public Poco DoWork()
{
// do stuff
}
}
测试方法 A.......
[Test]
public static void TestPocoIsPopulated()
{
var objUt = new Worker();
var actual = objUt.DoWork();
var expected = new Poco { SomeData = "reusltOne", SomeMoreData = "resultTwo" };
actual.ShouldBeEquivalentTo(expected);
}
这很好用。但是,随着嵌套类的较大测试,使用 ShouldBeEquivalentTo() 变得很麻烦,我希望能够按如下方式执行此操作...
编辑:同样使用方法 A 你不能这样做.... var 预期 = 新 Poco { SomeData = [NOT_NULL] , SomeMoreData = "resultTwo" };
测试方法 B.......
[Test]
public static void TestPocoIsPopulated()
{
var objUt = new Worker();
var actual = objUt.DoWork();
actual.SomeData.Should().Be("resultOne");
actual.SomeMoreData.Should().Be("resultTwo");
}
但是,如果我向 Poco 添加一个新属性,那么测试方法 B 不会抱怨,并且该属性可能不会得到测试。但是,使用方法 A,测试将失败,因为 ShouldBeEquivalentTo() 会注意到新属性为空
所以,我的问题是,有没有如下方法C。
测试方法C............
[Test]
public static void TestPocoIsPopulated()
{
var objUt = new Worker();
var actual = objUt.DoWork();
actual.SomeData.Should().Be("resultOne");
actual.SomeMoreData.Should().Be("resultTwo");
actual.Should().HaveAllPropertiesBeenTested().EqualTo(true); // <-------- is this possible?
}
【问题讨论】:
-
ShouldBeEquivalentTo 到底有什么问题?它专门满足您的要求。
-
例如,您不能在 ShouldBeEquivalentTo 中使用 Should().BeGreaterThan(1)(参见上面的编辑)
-
是的,你可以。只需使用选项对象上的 Using() 方法之一来覆盖特定属性的断言。见github.com/dennisdoomen/fluentassertions/wiki/…
标签: c# unit-testing fluent-assertions