我正在使用 Specflow 3 编写单元测试,为了测试在数据库中查询数据的方法,我使用 NFluent有很好的断言方法。
有什么方法可以顺利地测试对象的几个成员的相等性吗?
有一个名为 HasFieldsWithSameValues 的方法,但我在他们的 wiki 中找不到任何内容解释如何彻底使用它。我们可以链接一个 Exclusion("fieldNames","etc",...) 方法,但我必须排除 20 多个公共(public)成员。
这是我的功能文件(功能场景,Gherkin 语法)
Scenario: TimeSheet_001_SearchForExistingTimeSheet
When I search for timesheet with id 31985
Then I get the following timesheet
| id | StatutPaid | StatutFact |
| 31985 | Paid | None |
然后我有这个代码块调用的方法:
[When(@"I search for timesheet with id (.*)")]
public void WhenJeChercheLeReleveDHeureAvecLId(int id)
{
var result = GetTimeSheetDetailQuery(id);
timeSheetContext.Result = result;
}
[Then(@"I get the following timesheet")]
public void ThenJObtiensLeReleveDHeureSuivant(Table table)
{
var sut = table.CreateInstance<TimeSheetDetail>();
Check.That(sut).HasFieldsWithSameValues<TimeSheetDetail>().Fields.IsEqualTo(timeSheetContext.Result);
}
问题是 TimeSheetDetail 是一个非常详细的对象,我只需要检查这个测试用例的 3 个成员。 有没有办法写例如
//this
Check.That(sut)
.HasFieldsWithSameValues<myType>("Id","StatusPaid","StatusFact")
.IsEqualTo(timeSheetContext.Result);
//instead of this
Check.That(sut.Id).IsEQualTo(timeSheetContext.Result.Id);
Check.That(sut.StatusPaid).IsEQualTo(timeSheetContext.Result.StatusPaid);
Check.That(sut.StatusFact).IsEQualTo(timeSheetContext.Result.StatusFact);
最佳答案
您可以使用匿名类型作为预期值来获得所需的结果。
Check.That(sut).HasFieldsWithSameValues(new {Id=1, StatusPaid = true, StatusFact = "Paid"});
这样可以集中比较感兴趣的领域。
如果您需要进行多次这样的检查,您应该考虑为此创建一个简单的专用类型,而不是匿名类型。
关于c# - Nfluent 仅检查对象的少数成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57804341/