相关疑难解决方法(0)

Android单元测试需要上下文

我正在编写我的第一个Android数据库后端,我正在努力对我的数据库的创建进行单元测试.

目前我遇到的问题是获取一个有效的Context对象来传递给我的SQLiteOpenHelper实现.有没有办法在扩展TestCase的类中获取Context对象?我想到的解决方案是在我的TestCase的setup方法中实例化一个Activity,然后将该Activity的Context分配给我的测试方法可以访问的字段变量......但似乎应该有一个更简单的方法.

感谢您的输入!

梅西

database android unit-testing

59
推荐指数
5
解决办法
4万
查看次数

getTargetContext()和getContext(在InstrumentationRegistry上)之间有什么区别?

我正在使用新的Android测试支持库(com.android.support.test:runner:0.2)来运行Instrumentation Tests(aka Device或Emulator Tests).

我用我的测试类注释@RunWith(AndroidJUnit4.class)并使用Android Studio来运行它们.

对于我的测试用例,我需要一个Context实例.我可以得到它,InstrumentationRegistry但它有两个上下文相关的方法,并不清楚有什么区别.

InstrumentationRegistry.getContext()vs 之间有什么区别InstrumentationRegistry.getTargetContext()

android android-testing

32
推荐指数
1
解决办法
1万
查看次数

在Android Studio的单元测试功能中获取AndroidTestCase或InstrumentationTestCase中的上下文

我使用Android Studio 1.1.0的新单元测试支持功能运行了一些旧的测试.运行gradlew testDebug时,运行测试,但所有需要Context失败的测试都因为getContext(AndroidTestCase)/ getInstrumentation.getContext()(InstrumentationTestCase)都返回null.

我怎么解决这个问题?

这是我试过的两个变种:

import android.content.Context;
import android.test.InstrumentationTestCase;

public class TestTest extends InstrumentationTestCase {

    Context context;

    public void setUp() throws Exception {
        super.setUp();

        context = getInstrumentation().getContext();

        assertNotNull(context);

    }

    public void testSomething() {

        assertEquals(false, true);
    }  

}
Run Code Online (Sandbox Code Playgroud)

import android.content.Context;
import android.test.AndroidTestCase;

public class TestTest extends AndroidTestCase {

    Context context;

    public void setUp() throws Exception {
        super.setUp();

        context = getContext();

        assertNotNull(context);

    }

    public void testSomething() {

        assertEquals(false, true);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的模块build.gradle:

apply plugin: …
Run Code Online (Sandbox Code Playgroud)

android unit-testing android-studio

22
推荐指数
3
解决办法
4万
查看次数

Android Studio:无法在检测测试中写入共享首选项

我正在尝试编写一个测试用例来验证写入共享首选项的类.我正在使用Android Studio v1.5.

在良好的旧日食中,使用时AndroidTestCase,第二个apk文件被部署到设备,并且可以使用检测上下文运行测试,因此您可以使用检测apk的共享首选项运行测试,而无需更改主apk的现有共享首选项文件.

我花了整个上午试图弄清楚如何在Android Studio测试中获得非空上下文.显然,为eclipse进行的单元测试与Android Studio测试框架不兼容,因为调用getContext()返回null.我以为我在这个问题中找到了答案: 在Android junit测试用例中获取测试项目的上下文

随着旧版本的Android Studio没有完整的测试支持,事情已经发生了变化.所以很多答案都只是黑客攻击.显然现在不是扩展InstrumentationTestCase,AndroidTestCase你应该像这样编写测试:

@RunWith(AndroidJUnit4.class)
public class MyTest {

    @Test
    public void testFoo(){
        Context instrumentationContext = InstrumentationRegistry.getContext();
        Context mainProjectContext = InstrumentationRegistry.getTargetContext();            
    }   
}
Run Code Online (Sandbox Code Playgroud)

所以我现在有一个非null的检测上下文,并且该getSharedPreferences方法返回一个似乎有效的实例,但实际上没有写入首选项文件.

如果我做:

context = InstrumentationRegistry.getContext();      
Run Code Online (Sandbox Code Playgroud)

然后,SharedPreferences编辑器正确写入和提交,不会抛出任何异常.仔细观察后,我可以看到编辑器正在尝试写入此文件:

data/data/<package>.test/shared_prefs/PREFS_FILE_NAME.xml
Run Code Online (Sandbox Code Playgroud)

但是文件永远不会被创建或写入.

但是使用这个:

context = InstrumentationRegistry.getTargetContext(); 
Run Code Online (Sandbox Code Playgroud)

编辑器正常工作,并将首选项写入此文件:

/data/data/<package>/shared_prefs/PREFS_FILE_NAME.xml
Run Code Online (Sandbox Code Playgroud)

首选项以私有模式实例化:

SharedPreferences sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)

据我所知,运行测试后没有测试apk上传到设备.这可能解释了为什么文件不是使用检测上下文编写的.这个上下文是否可能是一个无声地失败的虚假上下文?

如果是这种情况,我怎样才能获得真实的仪器上下文,以便我可以在不改变主项目偏好的情况下编写首选项

instrumentation android unit-testing android-context android-studio

15
推荐指数
1
解决办法
3091
查看次数

如何从Java项目中获取Junit测试的Android上下文?

我需要访问JUnit Test的Android上下文.

我尝试过使用MockContext并扩展AndroidTestCase,但每次我收到错误说(存根!)

android

13
推荐指数
3
解决办法
1万
查看次数

JUnit 本地测试 - '未解决的参考:测试'

预期的

导入库,比如androidx.test:core:1.2.0androidx.test.ext:truth:1.2.0com.google.truth:truth:0.44,等进入当地的JUnit命名测试类ExampleUnitTest.kt

观察到的

错误

未解决的参考:测试

执行

示例UnitTest.kt

import androidx.test.core.app.ApplicationProvider.getApplicationContext
import com.google.common.truth.Truth.assertThat
Run Code Online (Sandbox Code Playgroud)

junit android junit4 kotlin android-testing

4
推荐指数
1
解决办法
5661
查看次数