android - 运行单元测试时运行的 Junit5 和 Instrumentation 测试
问题描述
现在,当我运行单元测试时,我将测试升级到 junit5,它还运行我的仪器测试,这当然会导致错误,因为它们没有在模拟器中运行。我如何阻止它运行它们?我能够使用@RunWith(AndroidJUnit4::class) 解决一些错误,但我仍然有一个错误,它让我发疯
这是错误,但是,当我单击运行时,我不明白为什么我的仪器测试现在正在运行???
java.lang.NoClassDefFoundError: androidx/test/espresso/matcher/ViewMatchers
at com.magtec.magtecmcc.MainActivityTest.testLaunch(MainActivityTest.kt:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:531)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$0(SandboxTestRunner.java:256)
at org.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:89)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: androidx.test.espresso.matcher.ViewMatchers
at org.robolectric.internal.bytecode.SandboxClassLoader.getByteCode(SandboxClassLoader.java:164)
at org.robolectric.internal.bytecode.SandboxClassLoader.maybeInstrumentClass(SandboxClassLoader.java:119)
at org.robolectric.internal.bytecode.SandboxClassLoader.lambda$findClass$0(SandboxClassLoader.java:112)
at org.robolectric.util.PerfStatsCollector.measure(PerfStatsCollector.java:53)
at org.robolectric.internal.bytecode.SandboxClassLoader.findClass(SandboxClassLoader.java:111)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 19 more
解决方案
多个选项首先单独进行测试:
- @Ignore 如果你想完全禁用
把假设真(条件);停用对运行时条件的测试
然后您也可以这样做:首先开始测试,然后单击顶部显示您的运行配置的下拉菜单单击编辑配置
- 将配置文件夹更改为排除您的特定测试的文件夹
- 或将测试类型切换为模式,并希望您对排除的测试文件有某种命名约定,然后您可以编写一个仅包含您想要的正则表达式模式
推荐阅读
- laravel - Laravel 路由中复杂模型名称的依赖注入
- python-3.x - AttributeError:当我使用 blaze 模块时,模块 'pandas' 没有属性 'tslib'
- python - 如何纠正我在石头剪刀布游戏中的错误
- json - Shell 脚本 - 如果在 Bash 中匹配,则迭代、比较和提取 JSON 的值
- typescript - 如何在 tsconfig 中声明库中包含的类型?
- javascript - 屏幕阅读器在 aria-valuetext 在任何时候都不会更改多个步骤后停止阅读
- swift - 我可以使用泛型协议来描述非泛型类型的委托吗?
- javascript - 在开关情况下无法识别对象的属性
- firebase - Firestore 中 .orderBy("id").startAt(n).limit(1) 的成本?
- reactjs - Passport.js isAuthenticated() 在 heroku 上总是返回 false,但在本地运行服务器时正常工作