Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 MSTest单元测试-处理异常_C# 4.0_Mstest - Fatal编程技术网

C# 4.0 MSTest单元测试-处理异常

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

我有一个C#单元测试,使用SeleniumWebDriver来测试是否存在链接。代码如下:

   [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,如果找不到链接,它将始终引发异常。您可以做的是将两个测试分开,第一个测试将检查链接是否存在,第二个测试将断言其属性。然后使用一个命令一个接一个地执行它们。如果第一个失败,将不执行第二个。如果你想要更多的细节,我可以在我的答案中发布。谢谢你的回复。请张贴你的答案。