Uncaught Exception Handler - UiAutomator

时间:2014-07-11 14:31:56

标签: java junit exception-handling uiautomator uncaught-exception

我想让UiAutomator在测试失败时截取屏幕截图。我目前有这种设置的方式是这样的:

    @Override
protected void setUp() throws Exception {
    System.out.println("Beginning setup...");
    testFailed = true;
}

@Override
protected void tearDown() throws Exception {
    if(testFailed)
        getUiDevice().takeScreenshot("/sdcard/Pictures/Screenshots/failure.jpg");
}

然后个人测试就像这样

public void testExample(){
  /* do stuff */
  testFailed = false;
}

这个想法是,如果抛出异常,testFailed永远不会设置为false,并且tearDown在测试后调用时会截取屏幕截图。

我真的希望能够在我的代码中添加一个testListener或未捕获的异常处理程序,以便更优雅地解决这个问题。但是,UiAutomator有自己的未捕获异常处理程序,它覆盖了我试图实现的异常处理程序。我可以添加我未捕获的异常处理程序,但它只是被忽略了。

有没有办法可以添加一个未捕获的异常处理程序,它会拦截它们被抛出的位置和UiAutomator的未捕获异常处理程序之间的异常,然后将它们传递给UiAutomator?

我是否有另一种方法可以监听测试失败/抛出异常而无需在每次测试结束时特别添加布尔值?

1 个答案:

答案 0 :(得分:2)

而不是在拆解时调用getUiDevice()。takeScreenshot()将其置于函数内 - 比如foo()并在异常发生时调用它。

现在将要测试的代码放在try catch块中并在catch调用foo()中。有点像这样 -

try{
//add your test code here
}
catch(Exception e){
foo();
//and if you want to throw exception again so your current test flow is not disturbed then add
throw e;
}
相关问题