Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Kotlin 代表跑步者';androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner';对于AndroidJUnit4,无法加载_Kotlin_Android Espresso - Fatal编程技术网

Kotlin 代表跑步者';androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner';对于AndroidJUnit4,无法加载

Kotlin 代表跑步者';androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner';对于AndroidJUnit4,无法加载,kotlin,android-espresso,Kotlin,Android Espresso,我尝试为android运行Kotlin仪器测试 在我的应用程序/build.gradle中: android { dataBinding { enabled = true } compileSdkVersion 28 defaultConfig { applicationId "com.myproject" minSdkVersion 18

我尝试为android运行Kotlin仪器测试

在我的应用程序/build.gradle中:

    android {
        dataBinding {
            enabled = true
        }
        compileSdkVersion 28
        defaultConfig {
            applicationId "com.myproject"
            minSdkVersion 18
            targetSdkVersion 28
            versionCode 6
            versionName "0.0.7"
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }

        sourceSets {
            main.java.srcDirs += 'src/main/kotlin'
            androidTest.java.srcDirs += 'src/androidTest/kotlin'
        }

androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha02'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test:rules:1.1.2-alpha02'
    androidTestImplementation 'androidx.test:runner:1.1.2-alpha02'
在文件夹
/app/src/androidTest/kotlin/com/myproject/
中,我有kotlin测试:

import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Rule
import org.junit.runner.RunWith

import androidx.test.rule.ActivityTestRule
import com.myproject.ui.activity.TradersActivity
import org.junit.Before


@RunWith(AndroidJUnit4::class)
@SmallTest
class TradersActivityTest {

    private lateinit var stringToBetyped: String

    @get:Rule
    var activityRule: ActivityTestRule<TradersActivity> = ActivityTestRule(TradersActivity::class.java)

    @Before
    fun initValidString() {
        // Specify a valid string.
        stringToBetyped = "Espresso"
    }

}
导入androidx.test.ext.junit.runners.AndroidJUnit4
导入androidx.test.filters.SmallTest
导入org.junit.Rule
导入org.junit.runner.RunWith
导入androidx.test.rule.ActivityTestRule
导入com.myproject.ui.activity.traderActivity
导入org.junit.Before
@RunWith(AndroidJUnit4::类)
@小测验
类TradersActivityTest{
私有lateinit var StringToByped:String
@获取:规则
var activityRule:ActivityTestRule=ActivityTestRule(TradersActivity::class.java)
@以前
有趣的初始化字符串(){
//指定有效的字符串。
stringToBetyped=“浓缩咖啡”
}
}
但当我运行测试时,我得到错误:

$ adb shell am instrument -w -r   -e debug false -e class 'com.myproject.TradersActivityTest' com.myproject.debug.test/androidx.test.runner.AndroidJUnitRunner
Client not ready yet..
Started running tests

java.lang.RuntimeException: Delegate runner 'androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner' for AndroidJUnit4 could not be loaded.
at androidx.test.ext.junit.runners.AndroidJUnit4.throwInitializationError(AndroidJUnit4.java:92)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:82)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:51)
at androidx.test.ext.junit.runners.AndroidJUnit4.<init>(AndroidJUnit4.java:46)
at java.lang.reflect.Constructor.newInstance(Native Method)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at androidx.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.java:63)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at androidx.test.internal.runner.AndroidRunnerBuilder.runnerForClass(AndroidRunnerBuilder.java:153)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at androidx.test.internal.runner.TestLoader.doCreateRunner(TestLoader.java:73)
at androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:104)
at androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:789)
at androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:544)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:387)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1879)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:72)
... 16 more
Caused by: org.junit.runners.model.InitializationError
at org.junit.runners.ParentRunner.validate(ParentRunner.java:418)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
at androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:43)
at androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:48)
... 18 more

Tests ran to completion.
$adb shell am instrument-w-r-e debug false-e class'com.myproject.TradersActivityTest'com.myproject.debug.test/androidx.test.runner.AndroidJUnitRunner
客户还没有准备好。。
开始运行测试
java.lang.RuntimeException:无法加载AndroidJUnit4的代理运行程序“androidx.test.internal.runner.junit4.AndroidJUnit4类运行程序”。
位于androidx.test.ext.junit.runners.AndroidJUnit4.throwinInitializationError(AndroidJUnit4.java:92)
位于androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:82)
位于androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:51)
位于androidx.test.ext.junit.runners.AndroidJUnit4.(AndroidJUnit4.java:46)
位于java.lang.reflect.Constructor.newInstance(本机方法)
位于org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
位于org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
位于androidx.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.java:63)
位于org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
位于org.junit.internal.builders.AllDefaultPossibilityBuilder.runnerForClass(AllDefaultPossibilityBuilder.java:26)
位于androidx.test.internal.runner.AndroidRunnerBuilder.runnerForClass(AndroidRunnerBuilder.java:153)
位于org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
位于androidx.test.internal.runner.TestLoader.doCreateRunner(TestLoader.java:73)
位于androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:104)
位于androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:789)
位于androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:544)
位于androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:387)
位于android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1879)
原因:java.lang.reflect.InvocationTargetException
位于java.lang.reflect.Constructor.newInstance(本机方法)
位于androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:72)
... 还有16个
原因:org.junit.runners.model.InitializationError
位于org.junit.runners.ParentRunner.validate(ParentRunner.java:418)
在org.junit.runners.ParentRunner上(ParentRunner.java:84)
位于org.junit.runners.BlockJUnit4ClassRunner。(BlockJUnit4ClassRunner.java:65)
位于androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner。(AndroidJUnit4ClassRunner.java:43)
位于androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner。(AndroidJUnit4ClassRunner.java:48)
... 还有18个
测试一直进行到完成。

删除@Test方法时显示的错误消息

您可以尝试放置@Test方法并运行

@Test
public void signInTest() {


}

我在这个问题上浪费了一整天您没有任何带有
@Test
注释的函数。这可能是问题的原因。我已经在一个没有
@test
函数的类上使用AndroidJUnit4运行程序运行了我自己的测试,并重建了这个行为

AndroidJUnit4 JUnit4运行程序是导致此问题的原因,尽管它试图提供详细的消息(请参阅引发异常的代码),但它给出了错误的消息

以下是实现此错误的更多方法:

@Test
fun willThrowInitializationErrorBecauseReturnsNonUnitValue(): Int {
    return 0
}

@Test
fun willThrowInitializationErrorBecauseTakesParameters(param: Int) {
}
这个错误是由于您正在编写JUnit4样式的测试而产生的,并且它们应该符合JUnit4语义,但是如果错误消息更清楚,那就更好了


更糟糕的是,如果一个测试函数出错,运行程序将不会运行任何测试,因为在AndroidJUnit4类的构造函数中抛出了
初始化错误

我在kotlin中遇到了这个问题,它在代码下面使用,并且有效

@RunWith(AndroidJUnit4::class)

@LargeTest

class MainActivityTest {

    private val TAG = "MainActivityTest"

    @get:Rule
    val activityRule = ActivityTestRule(MainActivity::class.java)
}
请点击以下链接:-
当我的测试方法中有一些参数时,我得到了这个错误。 因此,如果你有它-删除它

@Test
fun someTestMethod(someParams: Int) { // delete method params
    assert(1==1)
}

只要确保如果您的测试正在调用任何挂起方法,那么您可以使用
runBlocking{}
运行测试。为我解决了这个问题

对于那些仍然有类似问题的人,发生这种情况是因为Kotlin编译器想要生成getter/setter属性。例如,我得到这个错误是因为我没有用
@get:Rule
提到
@Rule
注释

如果我们用
@get:…
@JvmField
注释类似这样的属性,就可以解决问题

@get:Rule
var mActivityRule = ActivityTestRule(MainActivity::class.java)


@JvmField
指示Kotlin编译器不要为此属性生成getter/setter并将其作为字段公开。

在我使用Java时,我遇到了以下错误

1) 我已将活动测试规则设置为私有

  All test cases should be public always.
2) 我没有为课前课后方法添加静态

  Methods of @BeforeClass and @AfterClass should be static

  Ex)@BeforeClass
     public static void setUp(){

     }

也只是为了进一步说明答案,但由于这个特殊原因,它不会有帮助:

如果您使用kotlin并在测试时获得此信息,请确保您没有在DAO中使用
suspend

(很抱歉把它放在这里,t
  Methods of @BeforeClass and @AfterClass should be static

  Ex)@BeforeClass
     public static void setUp(){

     }