在Android Kotlin中,assertNotNull会导致单元测试不运行
在androidstudio中,我创建了androidTest包并添加了一个在Android Kotlin中,assertNotNull会导致单元测试不运行,android,unit-testing,kotlin,Android,Unit Testing,Kotlin,在androidstudio中,我创建了androidTest包并添加了一个TestClass。 @BeforeClass函数必须是静态的, 因此,我必须添加@JvmStatic,并将其放入同伴对象中 但是如果将assertNotNull()放在伴随对象中,则在运行测试时将显示“空测试套件”,并且测试不会运行。 但是它确实看到了“+++++++initBeforeTest()”日志,该日志位于assertXXX语句之前 +++ +++ initBeforeTest() ++ +++ afterT
TestClass
。
@BeforeClass
函数必须是静态的,
因此,我必须添加@JvmStatic
,并将其放入同伴对象中
但是如果将assertNotNull()
放在伴随对象中
,则在运行测试时将显示“空测试套件”,并且测试不会运行。
但是它确实看到了“+++++++initBeforeTest()”
日志,该日志位于assertXXX语句之前
+++ +++ initBeforeTest()
++ +++ afterTest()
Client not ready yet..
Started running tests
Tests ran to completion.
Empty test suite.
如果我在@BeforeClass
函数中注释掉了assertNotNull()
,该函数位于配套函数中,测试将按预期运行
+++ +++ initBeforeTest()
++ +++ afterTest()
Client not ready yet..
Started running tests
java.lang.AssertionError: test assertNotNull
at org.junit.Assert.fail(Assert.java:88)
知道为什么assertNotNull()(实际上是所有assertXXX函数)会导致测试不运行吗
格雷德尔:
testImplementation "junit:junit:4.12”
androidTestImplementation "com.android.support.test:runner:1.0.1”
测试等级:
@RunWith(AndroidJUnit4::class)
class TestClass {
companion object {
@BeforeClass @JvmStatic
fun beforeTest() {
Log.e("+++","+++ +++ initBeforeTest()")
// if comment out this assertNotNull(), the test will run
assertNotNull("test assertNotNull", null) //<== causes "Empty test suite."
}
@AfterClass @JvmStatic
fun afterTest() {
}
}
@Test
fun test1() {
assertNotNull("test assertNotNull", null)
}
}
@RunWith(AndroidJUnit4::class)
类TestClass{
伴星{
@BeforeClass@JvmStatic
考试前的乐趣{
Log.e(“+++”,“+++++++initBeforeTest()”)
//如果注释掉此assertNotNull(),测试将运行
assertNotNull(“test assertNotNull”,null)/请记住,如果用@BeforeClass
注释的方法失败,Junit运行程序将不会执行套件的其余部分
由于您的断言(assertNotNull(“test assertNotNull”,null)
)失败,因此会引发异常(实际上是一个AssertionError
),导致套件安装失败。这反过来会导致测试运行者假定它没有测试。这就是为什么删除失败的断言会导致测试运行(因为安装成功)
如果将设置中的断言更改为此,我怀疑它将通过:
assertNull("test assertNull", null)
编辑:更清楚地说,当您使用assertNotNull
时,您是在告诉Junit提供的值不能为空,在您的情况下,它是空的。assertNotNull
(“test assertNotNull”)的第一个参数是一条消息,它将被合并到失败消息中(正如您在提供的输出中所看到的那样)。第二个参数(在本例中为null)是不能为null的。请记住,如果您用@BeforeClass
注释的方法失败,Junit运行程序将不会执行套件的其余部分
由于您的断言(assertNotNull(“test assertNotNull”,null)
)失败,因此会引发异常(实际上是一个AssertionError
),导致套件安装失败。这反过来会导致测试运行者假定它没有测试。这就是为什么删除失败的断言会导致测试运行(因为安装成功)
如果将设置中的断言更改为此,我怀疑它将通过:
assertNull("test assertNull", null)
编辑:更清楚地说,当您使用assertNotNull
时,您是在告诉Junit提供的值不能为空,在您的情况下,它是空的。assertNotNull
(“test assertNotNull”)的第一个参数是一条消息,它将被合并到失败消息中(正如您在提供的输出中所看到的那样)。第二个参数(在本例中为null)是不能为null的。您是对的,如果更改为org.junit.Assert.assertNull(“test assertNull”,null),它将通过。将“null”与assertNotNull()一起使用是为了在结果为null时看到断言将生效(在实际代码中,'null'实际上是在运行时计算的对象)。奇怪的是,如果断言失败,它应该抛出。非常感谢!您是对的,如果更改为org.junit.assert.assertNull(“test assertNull”,null),它将通过。将'null'与assertNotNull()一起使用是为了在结果为null时看到断言将生效(在实际代码中,'null'实际上是在运行时计算的对象)。奇怪的是,如果断言失败,它应该抛出。非常感谢!