扩展AndroidTestCase类时,JUnit 4注释无法正常工作

时间:2016-04-20 08:03:53

标签: java android junit android-testing

您好我正在为我的sqlite db做测试部分。我之前使用过JUnit但是我知道我必须扩展AndroidTestCase以获得模拟上下文。但是,当我尝试捕获异常时(比如在JUnit中),编译器正在抱怨。为什么这个Android现在附带JUnit 4?

类示例供参考:

public class MyTest extends AndroidTestCase {

   @Test(expected=NullPointerException.class) //<-- this does not work
   public void testRandomMethod() {
     callRandomMethod()  //Throws NullPointerException
   }
}

3 个答案:

答案 0 :(得分:1)

  1. 删除AndroidTestCase
  2. 使用@Runwith(AndroidJunit4.class)
  3. 对于上下文, 使用InstrumentationRegistry.getTargetContext()

答案 1 :(得分:0)

如果扩展A 1: abadia-retuerta-seleccion-especial/ 2: albiano-verdicchio-d-cast-di-jesi/ 3: alois-lageder-gewurztraminer/ 4: anselmi-capitel-foscarino-veneto-bianco/ B 1: agusti-torello-roca 2: abadia-retuerta 3: anselmi 4: alois-lageder C (EXPECTED VALUES) 1: abadia-retuerta 2: <empty cell> 3: alois-lageder 4: anselmi ,那么您的测试将被视为JUnit 3测试,因为它扩展了JUnit的AndroidTestCase类。如果您正在编写JUnit 4测试,请不要扩展TestCase

答案 2 :(得分:0)

基本上,JUnit4测试的最小设置应该是这样的。

  • build.gradle

testCompile 'junit:junit:4.12'

testCompile 'org.hamcrest:hamcrest-core:1.3'

  • 将测试添加到src/test/java文件夹
  • 最简单的测试将如下所示
public class ExceptionExpectationTest {

    @Test(expected=NullPointerException.class)
    public void shouldThrowException() throws Exception {
        callRandomMethod();
    }

    private static void callRandomMethod() {
        //test will fail because we do not throw NPE
    }
}

PS。有关更多信息,请查看这些项目( android-testing-templatesqualitymatters)。 他们在其他类型的测试中都有纯粹的junit测试。