获取android instrumentation测试的有效(非空)上下文

apeeds0o  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(403)

我看了很多关于android工具测试的文章和文档,但是我的代码无法正常工作。
我的情况是,我不能使用模拟上下文对象,我需要一个有效的对象。
我试过使用:

@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在androidstudio的2.0环境中访问有效的、非空的上下文对象吗?
以下是我目前最好的尝试:

@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() 不起作用,因为我得到一个错误库试图调用一个资源。

vd8tlhqk

vd8tlhqk1#

我的构造函数用于一个不是活动的类:

public StartWorkoutRadialProgressBarTest()
{
    super(StartWorkoutRadialProgressBarTest.class);
}

当我把它改成一个我创建并调用的泛型活动类时 A_Testing 成功了:

public StartWorkoutRadialProgressBarTest()
{
    super(A_Testing.class);
}

因此,您必须使用activity类初始化,因为activityinstrumentationtestcase2没有为getactivity()调用提供有效的上下文对象。

相关问题