如何使用流利的断言报告对象的名称
Posted
技术标签:
【中文标题】如何使用流利的断言报告对象的名称【英文标题】:How can I report on the name of an object with fluent assertions 【发布时间】:2016-05-12 15:09:52 【问题描述】:我有一个测试可以检查我们网站上表格中的多个对象。测试用 SpecFlow 和 C# 编写
看起来像这样:
When I click proceed
Then I should see the following values
| key | value |
| tax | 5.00 |
| delivery | 5.00 |
| subtotal | 20.00 |
“然后”步骤的代码类似于:
[StepDefinition("I should see the following values")]
public void IShouldSeeTheFollowingValues(Table table)
var basketSummary = new BasketModel();
foreach (var row in table.Rows)
switch (row["key"])
case "tax":
basketSummary.Tax.Should().Be(row["value"]);
break;
case "delivery":
basketSummary.Delivery.Should().Be(row["value"]);
break;
case "subtotal":
basketSummary.Subtotal.Should().Be(row["value"]);
break;
问题在于我们的构建日志中,如果测试错误看起来像这样:
When I click proceed
-> done: OrderConfirmationPageSteps.ClickProceed() (1.0s)
Then I should see the following values
--- table step argument ---
| key | value |
| tax | 5.00 |
| delivery | 5.00 |
| subtotal | 20.00 |
-> error: Expected value to be 5.00, but found 1.00.
正如您在上面看到的那样,很难区分它意味着哪个对象......当它说它期望它是 5.00 有没有办法可以修改输出以说出以下内容:
-> error: Expected value of Tax to be 5.00, but found 1.00.
【问题讨论】:
【参考方案1】:你可以做两件事:
-
将原因短语传递给
Be()
方法,例如
`basketSummary.Delivery.Should().Be(row["value"], "因为那是
税值”);
将调用包装在AssertionScope
中,并将描述(上下文)传递给它的构造函数,例如
this
【讨论】:
【参考方案2】:在最新版本https://fluentassertions.com/introduction#subject-identification
string username = "dennis";
username.Should().Be("jonas");
//will throw a test framework-specific exception with the following message:
Expected username to be "jonas" with a length of 5,
but "dennis" has a length of 6, differs near "den" (index 0).
Fluent Assertions 可以使用单元测试的 C# 代码来提取 主题的名称并在断言失败中使用它。
由于它需要调试符号,这将要求您 以调试模式编译单元测试,甚至在您的构建服务器上。
【讨论】:
以上是关于如何使用流利的断言报告对象的名称的主要内容,如果未能解决你的问题,请参考以下文章