android instrumentation测试用例 - getinstrumentation()返回null

时间:2010-09-09 17:23:46

标签: android instrumentation

我一直在尝试将测试用例扩展到intrutrumentationtestcase,每当我调用getinstrumentation()时,它都会返回一个Instrumentation的null实例而不是Instrumentation,从而使我想做的任何自动化变得毫无用处。我也在清单中设置了权限,即使我只是测试同一个应用程序的自动化,这个案例将继续运行......任何想法?

4 个答案:

答案 0 :(得分:5)

您需要使用官方Android测试支持-lg中的injectInstrumentation(InstrumentationRegistry.getInstrumentation());调用InstrumentationRegistry以编程方式注入检测:0.1

答案 1 :(得分:3)

我遇到了类似的问题,似乎只有在调用基类(InstrumentationTestCase)setUp方法之后,getInstrumentation()方法才会返回有效的检测。请查看下面的代码并查看LogCat调试消息:

import android.app.Instrumentation;
import android.test.InstrumentationTestCase;
import android.util.Log;

public class TestInstrumentation extends InstrumentationTestCase {

private static final String LOG_TAG = BrowseLocationsTest.class.getSimpleName();

private Instrumentation instr;

public TestInstrumentation() {
    instr = getInstrumentation();
    Log.d(LOG_TAG, "TestInstrumentation instrumentation: " + instr);
}

@Override
protected void setUp() throws Exception {
    instr = getInstrumentation();
    Log.d(LOG_TAG, "setUp instrumentation: " + instr);

    super.setUp();

    instr = getInstrumentation();
    Log.d(LOG_TAG, "setUp instrumentation: " + instr);
}

public void testInstrumentation() {
    Log.d(LOG_TAG, "testInstrumentation instrumentation: " + instr);
}
}

在super.setUp()调用之后,检测正确到位。

答案 2 :(得分:2)

使用带有'@RunWith(AndroidJUnit4.class)'注释的测试支持库时遇到同样的问题,即使我确保按照@Gallal和@指示的setUp()方法注入我的仪器Dariusz Gadomski,只是继续抛出NullPointerExceptions。

事实证明,我忘了在我的设置方法中包含@Before注释,因此jUnit4没有运行它,而在使用基于jUnit3的Instrumentation测试之前,它会运行。因为我在setUp()中实现了instrumentation注入,所以即使代码看起来应该注入它也不会被注入。

所以而不是

@Override
protected void setUp() throws Exception {
...

务必使用

@Before
public void setUp() throws Exception {
    super.setUp();
    injectInstrumentation(InstrumentationRegistry.getInstrumentation());
}

代替。

答案 3 :(得分:-1)

我认为你真正需要的是Context,在JUnit4中,我们可以通过InstrumentationRegistry.getContext();获取上下文