您好我正在为我的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
}
}
答案 0 :(得分:1)
AndroidTestCase
@Runwith(AndroidJunit4.class)
对于上下文,
使用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-templates和 qualitymatters)。 他们在其他类型的测试中都有纯粹的junit测试。