获取Android Instrumentation测试的有效(非Null)上下文



我看了很多关于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()调用提供有效的上下文对象。

相关内容

  • 没有找到相关文章

最新更新