我刚开始学习
espresso
,我已经遇到了一些问题。我想执行一些非常基本的测试,看看它是如何工作的。
在我的场景中,我有一个很少有
EditText's
的片段。每当用户单击fab button
时,来自EditText's
的数据将被推送到database
.
现在,在我的测试中,我想在
fab button
上执行点击,然后,我想检查是否有任何 EditText
视图是空的。
这是我的“测试课”:
@RunWith(AndroidJUnit4::class)
internal class AddEmployeeTest{
@Test
fun someTest(){
onView(withId(R.id.add_new_employee))
.perform(click())
onView(withId(R.id.add_employee_name))
.check(matches(withText("")))
}
}
每当我运行这个测试时,在“运行”选项卡中,我可以看到有 0 个测试(就像应用程序甚至没有识别这个测试一样)
编辑: 我发现控制台有错误:
FATAL EXCEPTION: main
Process: com.example.employeemanagement, PID: 23154
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/test/platform/io/PlatformTestStorageRegistry;
at androidx.test.internal.runner.RunnerArgs$Builder.<init>(RunnerArgs.java:248)
at androidx.test.runner.AndroidJUnitRunner.parseRunnerArgs(AndroidJUnitRunner.java:393)
at androidx.test.runner.AndroidJUnitRunner.onCreate(AndroidJUnitRunner.java:302)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6751)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2133)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.test.platform.io.PlatformTestStorageRegistry" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/android.test.mock.jar", zip file "/system/framework/android.test.base.jar", zip file "/data/app/~~FyaHq8fjC3MyOK3JXnMk9g==/com.example.employeemanagement.test-HKp_Rjmzcc7Wr_mA0GsiJQ==/base.apk", zip file "/data/app/~~nz1qrLGnr_Tf3aZpH-fcrg==/com.example.employeemanagement-QnvDa-BSMtzD0Xf5SLlZjA==/base.apk"],nativeLibraryDirectories=[/data/app/~~FyaHq8fjC3MyOK3JXnMk9g==/com.example.employeemanagement.test-HKp_Rjmzcc7Wr_mA0GsiJQ==/lib/x86_64, /data/app/~~nz1qrLGnr_Tf3aZpH-fcrg==/com.example.employeemanagement-QnvDa-BSMtzD0Xf5SLlZjA==/lib/x86_64, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at androidx.test.internal.runner.RunnerArgs$Builder.<init>(RunnerArgs.java:248)
at androidx.test.runner.AndroidJUnitRunner.parseRunnerArgs(AndroidJUnitRunner.java:393)
at androidx.test.runner.AndroidJUnitRunner.onCreate(AndroidJUnitRunner.java:302)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6751)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2133)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
每当我运行这个测试时,在“运行”选项卡中,我可以看到有 0 个测试(就像应用程序甚至没有识别这个测试一样)
第一个猜测是从你的测试类中删除
internal
修饰符——它们应该是公开的,以便被注释处理器找到。