我查看过很多帖子并阅读有关Android Instrumentation测试的文档,但无法让我的代码正常工作。
我的情况是我无法使用模拟上下文对象,我需要一个有效的对象。
我尝试过使用:
@Before
public void setUp() throws Exception
{
super.setUp();
setActivityInitialTouchMode(true);
// Injecting the Instrumentation instance is required
// for your test to run with AndroidJUnitRunner.
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
_context = getActivity();
assertThat(_context, isA(Context.class));
}
但是我得到了
java.lang.RuntimeException:无法启动活动
我尝试让我的测试扩展InstrumentationTest并使用 getInstrumentation()。的getContext()
但那也是空的。
据我所知,仪器测试就是这样:当你需要利用应用程序时(即上下文)。
您知道如何使用junit4在Android Studio 2.0环境中访问有效的非null上下文对象吗?
这是我目前的最佳尝试:
@RunWith(AndroidJUnit4.class)
@SmallTest
public class StartWorkoutRadialProgressBarTest extends ActivityInstrumentationTestCase2
{
Context _context;
public StartWorkoutRadialProgressBarTest()
{
super(StartWorkoutRadialProgressBar.class);
}
@Before
public void setUp() throws Exception
{
super.setUp();
setActivityInitialTouchMode(true);
// Injecting the Instrumentation instance is required
// for your test to run with AndroidJUnitRunner.
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
_context = getActivity();
assertThat(_context, isA(Context.class));
}
@Test
public void initialization()
{
StartWorkoutRadialProgressBar bar = new StartWorkoutRadialProgressBar(100,100, _context);
Assert.assertThat(4, is(4));
}
}
注意:使用context = new MockContext()
并不起作用,因为我收到错误,因此库会尝试调用资源。
答案 0 :(得分:0)
我的构造函数是针对一个不是活动的类:
public StartWorkoutRadialProgressBarTest()
{
super(StartWorkoutRadialProgressBarTest.class);
}
当我将其更改为我创建的通用活动类并调用A_Testing
时,它可以工作:
public StartWorkoutRadialProgressBarTest()
{
super(A_Testing.class);
}
事实证明,必须使用活动类初始化,因为ActivityInstrumentationTestCase2不会通过getActivity()调用提供有效的上下文对象。