C# 4.0 MSTest单元测试-处理异常
我有一个C#单元测试,使用SeleniumWebDriver来测试是否存在链接。代码如下:C# 4.0 MSTest单元测试-处理异常,c#-4.0,mstest,C# 4.0,Mstest,我有一个C#单元测试,使用SeleniumWebDriver来测试是否存在链接。代码如下: [TestMethod()] public void RegisterLinkExistTest() { IWebElement registerLink = genericBrowserDriver.FindElement(By.PartialLinkText ("Register1")); Assert.AreEqual("Register her
[TestMethod()]
public void RegisterLinkExistTest()
{
IWebElement registerLink = genericBrowserDriver.FindElement(By.PartialLinkText ("Register1"));
Assert.AreEqual("Register here", registerLink.Text, "Failed");
}
我想看看如果我将PartialLinkText设置为“Register1”而不是“Register”,会发生什么。MSTest由于Selenium引发的异常而使此测试失败。我想让Assert.AreEqual执行,但MSTest在前一行抛出异常。我知道我可以使用ExpectedException属性来指定“OpenQA.Selenium.NoSuchElementException”,但我不想这样做,因为我不希望出现这种异常。我该如何处理这个问题?正如@AD.Net已经说过的,您的测试正在按预期进行 如果没有找到链接,您可以捕获异常,但我不认为这样做有什么意义。如果未找到链接,则
注册表链接将为null
。断言空对象的属性有什么意义
您的测试工作正常,只需删除Assert
行即可
但是,如果还想测试链接的文本,请尝试以下代码:
[TestMethod()]
public void RegisterLinkExistTest()
{
try
{
IWebElement registerLink = genericBrowserDriver.FindElement(By.PartialLinkText ("Register1"));
Assert.AreEqual("Register here", registerLink.Text, "Register's link text mismatch");
}
catch(NoSuchElementException)
{
Assert.Fail("The register link was not found");
}
}
编辑
您可以分离测试,第一个测试将检查链接是否存在,第二个测试将断言其属性
[TestMethod()]
public void RegisterLinkExistTest()
{
IWebElement registerLink = genericBrowserDriver.FindElement(By.PartialLinkText ("Register1"));
}
[TestMethod()]
public void RegisterLinkTextTest()
{
IWebElement registerLink = genericBrowserDriver.FindElement(By.PartialLinkText ("Register1"));
Assert.AreEqual("Register here", registerLink.Text, "Register's link text mismatch");
}
然后使用并按顺序添加它们,以便首先执行RegisterLinkExistTest
。如果失败,那么第二个测试将不会运行。不清楚,您显然知道它不应该存在,因此您将得到一个异常。因此,测试的行为符合预期。在这种情况下,我不希望MSTest抛出未处理的异常。例如,如果我正在寻找一个正确的链接“Register”,而站点没有它,我如何使代码不抛出未处理的异常,而是执行Assert语句呢?回答得很好。但是,一个简单的问题。我读过一些文章,不建议在单元测试中添加try…catch块。话虽如此,我是否可以检查FindElement方法是否返回null,然后执行Assert.Fail?首先,我认为您的测试不是单元测试,而是自动GUI测试。FindElement
方法永远不会返回null,如果找不到链接,它将始终引发异常。您可以做的是将两个测试分开,第一个测试将检查链接是否存在,第二个测试将断言其属性。然后使用一个命令一个接一个地执行它们。如果第一个失败,将不执行第二个。如果你想要更多的细节,我可以在我的答案中发布。谢谢你的回复。请张贴你的答案。