在Android Studio中,我创建了androidTest程序包并添加了一个TestClass
。该@BeforeClass
功能必须是静态的,因此我必须将其添加@JvmStatic
到中companion object
。
但是如果放在assertNotNull()
其中companion object
,它将在运行测试时显示“空测试套件”,并且测试不会运行。但是它确实看到了"+++ +++ initBeforeTest()"
放置在assertXXX语句之前的日志。
+++ +++ initBeforeTest()
++ +++ afterTest()
Client not ready yet..
Started running tests
Tests ran to completion.
Empty test suite.
如果我在同伴内部assertNotNull()
的@BeforeClass
函数中注释掉,则测试将按预期运行。
+++ +++ 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)
}
}
请记住,如果您注释的方法@BeforeClass
失败,那么Junit Runner将不会执行其余的套件。
由于您的断言(assertNotNull("test assertNotNull", null)
)失败,因此引发了一个异常(实际上是一个AssertionError
),导致套件设置失败。反过来,这会使测试运行程序假定它没有测试。这就是为什么删除失败的断言将导致测试运行的原因(因为安装成功)。
如果将设置中的断言更改为此,我怀疑它会通过:
assertNull("test assertNull", null)
编辑:更清楚地说,当您使用时,assertNotNull
您告诉Junit提供的值不能为null,在您的情况下为null。assertNotNull
(“ test assertNotNull”)的第一个参数是一条消息,它将被合并到失败消息中(如您在提供的输出中所看到的)。第二个参数(在这种情况下为null)是不能为null的东西。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句