简体   繁体   中英

Cannot capture exception details in @Override in JUnit4

@Rule
public MethodRule watchman = new TestWatchman() {
    @Override
    public void failed(Throwable e, FrameworkMethod method) {
        try {
            System.out.println("Exception =" + e.getClass().getSimpleName());
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        assertTrue(false);
    }
};

The code that causes the failure is :

assertTrue("Missing first picture",selenium.isElementPresent("//div/a/img[2]"));   

My question is how do I pass the error message "Missing first picture" to the @Override so that it prints out that message.

I'm a little confused as to why your MethodRule.failed method contains the statement assertTrue(false) . For the sake of this discussion I will assume that you added that statement for testing and then did not remove it for this post.

The Assert.assertTrue method, when fails, causes a java.lang.AssertionError to be thrown with it's message value being set to the text you supplied as the first parameter to the assertTrue method. In order to retrieve that value you simply invoke the following: e.getMessage() .

Here is an example of a Method rule that prints out the success and failure results of the tests being monitored to System.err (used as example only):

@Rule
public MethodRule watchman = new TestWatchman() {
    @Override
    public void failed(Throwable e, FrameworkMethod method) {
        System.err.println(method.getName() + "() failed with error: " + e.getMessage());
    }

    @Override
    public void succeeded(FrameworkMethod method) {
        System.err.println(method.getName() + "() succeeded");
    }
};

If you use this example with the following tests:

@Test
public void test1() {
    assertTrue("will not happen", true);
}

@Test
public void test2() {
    assertTrue("My error message", false);
}

You will see the following:

test1() succeeded
test2() failed with error: My error message

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM