Как я могу сообщить о названии объекта с беглыми утверждениями

У меня есть тест, который проверяет несколько объектов в таблице на нашем сайте. Тест написан на 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.

2 ответа

Вы можете сделать две вещи:

  1. Передать фразу причины Be() метод, например, basketSummary.Delivery.Should().Be(row["value"], "потому что это налоговая стоимость");
  2. Оберните звонок в AssertionScope и передать описание (контекст) в его конструктор, как это

В последней версии 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# модульного теста для извлечения имени субъекта и использования его при ошибке утверждения.

Поскольку для этого нужны символы отладки, вам потребуется скомпилировать модульные тесты в режиме отладки даже на ваших серверах сборки.

Другие вопросы по тегам