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