我如何将多重断言与 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"));
}
下面是我测试的断言 我如何将所有断言组合在一行代码中
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()
returnsIEnumerable<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"));
}