如何使用ActivityInstrumentationTestCase2捕获异常?(How to c

2019-10-22 05:17发布

我奋力追赶使用类在我的Android应用程序的测试案例预期例外ActivityInstrumentationTestCase2 。

我写的是提出这个问题非常简单的场景,而一旦这种解决我大概可以做同样的事情对我的应用程序。 在简单的场景的片断如下。

首先,是我要测试的应用程序,这引起了在其onCreate方法一个NullPointerException异常。

package com.example.crashtest;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String s = null;
        s.trim(); // NullPointerException raised here!
        setContentView(R.layout.activity_player);
    }

}

然后,还有就是运行这个测试我ActivityInstrumentationTestCase2类:

package com.my.test;

import android.test.ActivityInstrumentationTestCase2;
import com.example.crashtest.MainActivity;

public class MyClassTest extends ActivityInstrumentationTestCase2<MainActivity>{

    public MyClassTest() throws ClassNotFoundException {
        super(MainActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        //setUp() is run before a test case is started. 
        super.setUp();
        try {
            getActivity(); // This calls MainActivity.onCreate().
        } catch (Exception e) {
            // Never gets here =(
        }
    }

    public void test() throws Exception {
    }
}

如果我删除调用s.trim()那我也没问题,但我希望能够赶上执行测试时,我可能会发现任何异常。

当我执行上面的代码我收到以下消息:

Test failed to run to completion. Reason: 'Instrumentation 
run failed due to 'java.lang.NullPointerException''. Check device logcat for details

我怎么可以重写这样的行为?

我发现了一个非常类似的问题在这里从2013年开始这是不被应答。

Answer 1:

测试引擎(在你的情况ActivityInstrumentationTestCase2)就像一个沙箱。 由您的代码永远不会离开通过沙箱异常throw e ;

错误处理和错误转发不是任务ActivityInstrumentationTestCase2 。 每个错误将导致为失败的试验被终止。 你会得到有关原因的一些介绍:

测试无法运行至完成。 原因:“仪表运行失败是由于“显示java.lang.NullPointerException”。 详情请查看设备的logcat

所以我相信,遗憾的是没有(法律)的方式来捕获由测试引擎扔一个例外,处理它,并恢复测试。



Answer 2:

你可以这样做:

try{
  String s = null;
  s.trim(); // NullPointerException raised here!
}catch(Error err){
  //override your behaviour here
  throw err;
}


文章来源: How to catch exceptions using ActivityInstrumentationTestCase2?