Как мне объединить множественное утверждение с MSTEST (Specflow) - PullRequest
0 голосов
/ 26 февраля 2020

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

public void ThenICanSeeTheFunctionlitiesForNONtransitionUserAsClnician()
{
  Assert.IsTrue(ObjectRepository.phPage.GetMenuList().Contains("Show menu"));
  Assert.IsTrue(ObjectRepository.phPage.GetMenuList().Contains("Patient Summary"));
  Assert.IsTrue(ObjectRepository.phPage.GetMenuList().Contains("Patient Encounter"));
 }

Ответы [ 4 ]

2 голосов
/ 26 февраля 2020

Допущения

  • ObjectRepository.phPage.GetMenuList() возврат IEnumerable<string>
  • Вы можете использовать утверждения MSTest

Сначала нам нужно создайте коллекцию предметов, которые мы ожидаем иметь в «Списке меню» и что у нас есть на самом деле

var expectedItems = new List<string> { "Show menu", "Patient Summary", "Patient Encounter" };
var actualItems = ObjectRepository.phPage.GetMenuList();

Теперь у вас есть две опции, основанные на том, что вам нужно:

1 , Вы хотите проверить, содержит ли «MenuList» эти 3 элемента (но не только эти)

CollectionAssert.IsSubsetOf(expectedItems, actualItems);

2. Вы хотите проверить, содержит ли «MenuList» только эти 3 элемента (больше ничего)

CollectionAssert.AreEquivalent(expectedItems, actualItems);
0 голосов
/ 27 февраля 2020

Если вы просто хотите удобочитаемости в своем методе тестирования, вы можете ввести закрытый метод, который содержит все ваши утверждения, например,

public void ThenICanSeeTheFunctionlitiesForNONtransitionUserAsClnician() 
{
  AssertMenuListItems(ObjectRepository.phPage.GetMenuList());
}

private void AssertMenuListItems(TypeOfGetMenuList items) 
{
  Assert.IsTrue(items.Contains("Show menu"));
  Assert.IsTrue(items.Contains("Patient Summary"));
  Assert.IsTrue(items.Contains("Patient Encounter"));
}
0 голосов
/ 26 февраля 2020

Если вам буквально нужен только один Assert, технически вы можете сделать что-то вроде этого:

public void ThenICanSeeTheFunctionlitiesForNONtransitionUserAsClnician()
{
    var menuItems = ObjectRepository.phPage.GetMenuList();
    Assert.IsTrue(menuItems.Contains("Show menu") && menuItems.Contains("Patient Summary") && menuItems.Contains("Patient Encounter"));
}

Но тогда я считаю, что вы потеряете представление о том, какой именно пункт меню отсутствовал, когда тест не пройден. То, что у вас уже есть, теперь имеет смысл.

0 голосов
/ 26 февраля 2020

Вы можете использовать множественные утверждения Specflow, если хотите, чтобы ваши утверждения продолжали выполняться, если одно из них не удалось:

    public void ThenICanSeeTheFunctionlitiesForNONtransitionUserAsClnician()
        {
        Assert.Multiple(() =>
            {
          Assert.IsTrue(ObjectRepository.phPage.GetMenuList().Contains("Show menu"));
          Assert.IsTrue(ObjectRepository.phPage.GetMenuList().Contains("Patient Summary"));
        Assert.IsTrue(ObjectRepository.phPage.GetMenuList().Contains("Patient Encounter"));
            });
    }
...