Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android Kotlin中,assertNotNull会导致单元测试不运行_Android_Unit Testing_Kotlin - Fatal编程技术网

在Android Kotlin中,assertNotNull会导致单元测试不运行

在Android Kotlin中,assertNotNull会导致单元测试不运行,android,unit-testing,kotlin,Android,Unit Testing,Kotlin,在androidstudio中,我创建了androidTest包并添加了一个TestClass。 @BeforeClass函数必须是静态的, 因此,我必须添加@JvmStatic,并将其放入同伴对象中 但是如果将assertNotNull()放在伴随对象中,则在运行测试时将显示“空测试套件”,并且测试不会运行。 但是它确实看到了“+++++++initBeforeTest()”日志,该日志位于assertXXX语句之前 +++ +++ initBeforeTest() ++ +++ afterT

在androidstudio中,我创建了androidTest包并添加了一个
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'实际上是在运行时计算的对象)。奇怪的是,如果断言失败,它应该抛出。非常感谢!