Java和Eclipse中的断言问题

Java和Eclipse中的断言问题,java,eclipse,selenium,junit,Java,Eclipse,Selenium,Junit,我正在使用Java、SeleniumWebDriver和Junit。对Google的标题进行简单的验证,但当断言失败时会抛出异常,我的意思是当标题不匹配时 代码: public static void verifyTitle(String expectedTitle) { //get the title of the page String actualTitle = Base.getdriver().getTitle(); // verify

我正在使用Java、SeleniumWebDriver和Junit。对Google的标题进行简单的验证,但当断言失败时会抛出异常,我的意思是当标题不匹配时

代码:

public static void verifyTitle(String expectedTitle) {
        //get the title of the page
        String actualTitle = Base.getdriver().getTitle();

        // verify title
        assertThat(actualTitle, equalTo(expectedTitle));
    }
我正在调用main方法:
verifyTitle(“Hello”)

输出:

> Exception in thread "main" java.lang.AssertionError:  Expected:
> "Hello"
>      but: was "Google"    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)     at
> org.junit.Assert.assertThat(Assert.java:956)  at
> org.junit.Assert.assertThat(Assert.java:923)  at
> Modules.Help.verifyTitle(Help.java:161)   at
> Modules.Help.GUI(Help.java:152)   at Modules.Help.main(Help.java:29)
它正在检查一切是否正常,但不确定为什么会抛出异常?如何打印类似“标题不匹配”这样的消息,而不是此例外情况。

请编写以下内容:

if (!Objects.equals(actualTitle, expectedTitle))
  System.out.println("Title doesn't match.");
但你为什么要这么做

Selenium测试会自动通知您何时出现不符合预期的情况。抛出AssertError意味着失败,失败可以很好地展示给人类。当您使用System.out.println时,您只需打印一些内容,但程序会继续运行,就像没有错误一样。

写下以下内容:

if (!Objects.equals(actualTitle, expectedTitle))
  System.out.println("Title doesn't match.");
但你为什么要这么做


Selenium测试会自动通知您何时出现不符合预期的情况。抛出AssertError意味着失败,失败可以很好地展示给人类。当您使用System.out.println时,您只需打印一些内容,但程序会继续运行,就好像没有错误一样。

您应该尝试一下try catch,看看这里:我认为它可以帮助您;)

你应该试试试抓,看看这里:我想它可以帮你;)

这是JUnit的预期行为!当断言失败时,它将始终引发异常。以下是该方法的说明:

断言实际满足matcher指定的条件。如果 否则,将抛出带有匹配器信息的AssertionError 和失败的价值

您可以尝试/捕获错误,然后打印所需的消息

try {
    assertThat("a", equalTo("a"));
    System.out.println("Title matched");
}    
catch(Error e) {
    System.out.println("Title does not match");
}

这是JUnit的预期行为!当断言失败时,它将始终引发异常。以下是该方法的说明:

断言实际满足matcher指定的条件。如果 否则,将抛出带有匹配器信息的AssertionError 和失败的价值

您可以尝试/捕获错误,然后打印所需的消息

try {
    assertThat("a", equalTo("a"));
    System.out.println("Title matched");
}    
catch(Error e) {
    System.out.println("Title does not match");
}

只需学习javadoc即可:

断言实际满足matcher指定的条件。如果不是,则抛出一个AssertionError,其中包含有关匹配器和失败值的信息


关键是,当您使用JUnit运行时,会捕获异常;并翻译成一些漂亮的打印输出。因此,当您在JUnit@Test之外工作时;好;然后需要尝试/捕获其他代码…

只需研究javadoc即可:

断言实际满足matcher指定的条件。如果不是,则抛出一个AssertionError,其中包含有关匹配器和失败值的信息



关键是,当您使用JUnit运行时,会捕获异常;并翻译成一些漂亮的打印输出。因此,当您在JUnit@Test之外工作时;好;然后其他一些代码需要尝试/捕获…

您可以在断言中添加一条消息:
assertThat(“Title不匹配”,actualTitle,equalTo(expectedTitle))@bigdestroyer-我尝试了你给定的代码。但仍然有例外。如果使用JUnit断言,恐怕无法避免断言错误。你为什么要这样做?@bigdestropher-我不想避免错误,我只是想以一种良好的方式向用户展示它。例如:打印标题不匹配的消息。您可以在断言中添加消息:
assertThat(“标题不匹配”,actualTitle,equalTo(expectedTitle))@bigdestroyer-我尝试了你给定的代码。但仍然有例外。如果使用JUnit断言,恐怕无法避免断言错误。你为什么要这样做?@bigdestropher-我不想避免错误,我只是想以一种良好的方式向用户展示它。例如:打印标题不匹配的消息。为什么要捕获测试失败?他正在获取和异常,他希望捕获它,所以我认为这种方法可以帮助他,但我可能错了:为什么要捕获测试失败?他正在获取和异常,他希望捕获它,所以我认为这种方法可以帮助他,但我可能错了:谢谢你的回答。问题是,我总是喜欢使用给定的方法来验证标题和许多其他字符串。但在web中,我看到大多数验证示例都使用Assert方法,所以我想让我试试这个方法。我做错什么了吗?或者在什么特殊情况下我们应该使用断言?谢谢你的回答。问题是,我总是喜欢使用给定的方法来验证标题和许多其他字符串。但在web中,我看到大多数验证示例都使用Assert方法,所以我想让我试试这个方法。我做错什么了吗?还是有什么特殊情况下我们应该使用断言?@Buaban-这对我不起作用。即使在放置try/catch之后,我也会遇到同样的异常:(@Henry谢谢。我对C#感到困惑。我刚刚更新了我的答案。@Buaban-谢谢更新答案。它现在对我有效。你能告诉我,如果两个标题都匹配,那么如何在使用断言时打印成功消息吗?@HelpingHands你可以在断言下添加打印方法。查看我的更新答案。@Buaban-完美男人.谢谢。@Buaban-这对我不起作用。即使在放了try/catch之后,我也得到了同样的例外:(@Henry谢谢。我对C#感到困惑。我刚刚更新了我的答案。@Buaban-谢谢更新答案。它现在对我有效。你能告诉我,如果两个标题都匹配,那么如何在使用断言时打印成功消息吗?@HelpingHands你可以在断言下添加打印方法。查看我的更新答案。@Buaban-完美男人非常感谢。