我看了很多关于Android Instrumentation Test的文章和文档,但无法让我的代码正常工作。
我的场景是,我不能使用模拟上下文对象,我需要一个有效的对象。
我尝试过使用:
@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()
但这也是无效的。
据我所知,Instrumentation测试正是为了:当您需要使用应用程序(即上下文)时。
那么,你知道我如何使用junit4在AndroidStudio的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()
不起作用,因为我在库尝试调用资源时遇到错误。
我的构造函数用于一个不是活动的类:
public StartWorkoutRadialProgressBarTest()
{
super(StartWorkoutRadialProgressBarTest.class);
}
当我将其更改为我创建并称为A_Testing
的通用活动类时,它起了作用:
public StartWorkoutRadialProgressBarTest()
{
super(A_Testing.class);
}
因此,您必须使用活动类进行初始化,因为ActivityInstrumentationTestCase2没有通过getActivity()调用提供有效的上下文对象。