c# - Nfluent 仅检查对象的少数成员

标签 c# unit-testing mstest specflow nfluent

我正在使用 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/

相关文章:

c# - 最小起订量设置函数抛出异常不起作用

c# - 哪个 JSON 库在 .NET 中最适合您?

c# - 如何填充字符串的类列表?

javascript - 您如何模拟作为函数的 Angular 服务?

visual-studio-2010 - MSTest 未找到新测试

c# - VS2017 无法发现 MSTest 测试

MSTest:从公共(public)目录部署项目的明智方法?

javascript - ASP.NET Core Razor 页面 - 获取要在 Chart.js 图表上显示的列表数据

c# - 如何在 C# 中将多个数据表存储到单个数据集中?

django - python运行测试: ImproperlyConfigured