我如何将多重断言与 MSTEST (Specflow) 结合起来

How do i combine the Multiple Assertion with MSTEST (Specflow)

下面是我测试的断言 我如何将所有断言组合在一行代码中

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"));
 }

如果您希望您的断言保持运行,您可以使用 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"));
            });
    }

如果你真的只想要一个断言,从技术上讲,你可以这样做:

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

但我相信当测试失败时,您将无法准确了解缺少的菜单项。你现在已经拥有的方式很有意义。

假设

  • ObjectRepository.phPage.GetMenuList() returns IEnumerable<string>
  • 您可以使用 MSTest 断言

首先,我们需要创建一个项目集合,其中包含我们希望在 "MenuList" 中拥有的项目以及我们实际拥有的项目

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);

如果你只是想在你的测试方法中增加可读性,你可以引入一个私有方法,它包含你所有的断言,例如

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"));
}