Java和Eclipse中的断言问题

时间:2016-04-08 07:02:10

标签: java eclipse selenium junit

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

代码:

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

        // verify title
        assertThat(actualTitle, equalTo(expectedTitle));
    }

我在主要方法中调用: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)

它正在检查一切正确但不确定为什么抛出异常?如何打印消息,如"标题不匹配" 而不是此异常。

4 个答案:

答案 0 :(得分:2)

写下这个:

if (!Objects.equals(actualTitle, expectedTitle))
  System.out.println("Title doesn't match.");

但你为什么要这样做?

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

答案 1 :(得分:1)

这是JNunit的预期行为!当assert失败时,它将始终抛出异常。以下是方法assertThat的说明:

  

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

您可以尝试/捕获错误然后打印您想要的消息。

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

答案 2 :(得分:0)

你应该试试try catch,看看这里:http://beginnersbook.com/2013/04/try-catch-in-java/我认为它可以帮助你;)

答案 3 :(得分:0)

只需研究assertThat的javadoc:

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

关键是当你使用JUnit运行时,会捕获异常;并翻译成一些很好的打印输出。所以,当你在JUnit @Test之外工作时;好;那么其他一些代码需要尝试/捕捉...