【问题标题】:Uncaught Exception Handler - UiAutomator未捕获的异常处理程序 - UiAutomator
【发布时间】:2014-09-02 05:22:06
【问题描述】:

我想让 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)?

是否有另一种方法可以让我监听测试失败/抛出的异常,而无需在每个测试的末尾专门添加该布尔值?

【问题讨论】:

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


    【解决方案1】:

    不要在拆解中调用 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.. 我正要提出同样的建议!!
    • 你是救生员。谢谢:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2018-05-30
    相关资源
    最近更新 更多