未捕获异常处理程序 - UiAutomator

4

我希望在测试失败时,能够使用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个回答

2

不要在teardown中调用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;
}

不错,Shivam Gupta。我也正想建议同样的事情!! - Anvesh Yalamarthy
你真是个救星。谢谢 :-) - Tim Boland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接