天道酬勤,学无止境

android-espresso

IllegalAccessError:预验证类中的类引用解析为 Android 单元测试中的意外实现(IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation in Android unit test)

问题 我正在努力在 Android Studio 中进行单元测试以处理一些现有代码。 我遇到了 IllegalAccessError 并且似乎无法找到解决方案。 非常需要任何帮助。 我使用的是 Android Studio 1.1.0、gradle 1.1.0 和 Espresso 2.0。 堆栈跟踪: java.lang.NoClassDefFoundError: com/hoganas/eclino/activities/BikeActivity at com.hoganas.eclino.activities.ScanActivity$1.onItemClick(ScanActivity.java:49) at android.widget.AdapterView.performItemClick(AdapterView.java:308) at android.widget.AbsListView.performItemClick(AbsListView.java:1478) at android.widget.AbsListView$PerformClick.run(AbsListView.java:3480) at android.widget.AbsListView$3.run(AbsListView.java:4823) at android.os.Handler

2021-10-24 03:45:07    分类:技术分享    java   android   unit-testing   android-gradle-plugin   android-espresso

Check if a new Activity is started with Espresso by click on view

I have a button when click on this, start activity A. startActivityForResult(Intent(this, A::class.java) I need to check in an esspresso test when click on the button, start activity A or not? onView(withId(R.id.button)) .check(matches(isDisplayed())) .check(matches(isEnabled())) .perform(click()) // check is this A Activity start or not?

2021-10-24 03:13:29    分类:问答    java   android   testing   kotlin   android-espresso

IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation in Android unit test

I'm struggling getting a unit test in Android Studio to work on some existing code. I'm kepp getting the IllegalAccessError and can't seem to find a solution for it. Any help is very needed. I'm using Android Studio 1.1.0, gradle 1.1.0 and Espresso 2.0. The stacktrace: java.lang.NoClassDefFoundError: com/hoganas/eclino/activities/BikeActivity at com.hoganas.eclino.activities.ScanActivity$1.onItemClick(ScanActivity.java:49) at android.widget.AdapterView.performItemClick(AdapterView.java:308) at android.widget.AbsListView.performItemClick(AbsListView.java:1478) at android.widget.AbsListView

2021-10-23 23:44:48    分类:问答    java   android   unit-testing   android-gradle-plugin   android-espresso

Firebase 测试实验室在使用 ProGuard + Dagger 时失败(Firebase Test Lab fails when using ProGuard + Dagger)

问题 当满足以下条件时,仪器测试在本地模拟器和物理设备上通过,但在 Firebase 测试实验室失败: 为调试版本启用 ProGuard; Dagger 和 Espresso 都存在依赖关系。 FTL 显示了不同的测试问题: 1) 在 API 26-28 的情况下,它显示Instrumentation run failed due to 'java.lang.NoClassDefFoundError' Instrumentation run failed due to 'Process crashed.'或Instrumentation run failed due to 'Process crashed.' 异常堆栈跟踪看起来像这样,它并不总是显示在 Firebase 中,但总是存在于 logcat 中: Rejecting re-init on previously-failed class java.lang.Class<androidx.test.espresso.core.internal.deps.dagger.internal.Factory>: java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/inject/Provider; FATAL EXCEPTION: Instr: androidx

2021-10-23 22:06:39    分类:技术分享    android   proguard   android-espresso   dagger-2   firebase-test-lab

Android espresso - 如何检查 Listview 底部 TextView 的值?(Android espresso - How to check value of TextView at the bottom of Listview?)

问题 在上面的附图中,它是一个具有 TextView(交付报告)的 ListView Its status can be 'Sent' or 'Sending' or 'Failed' 我想检查“已发送”条件,这意味着成功发送断言消息 由于是对话,因此较新的消息将位于列表视图的底部。 我试过的是... // Type the message ViewInteraction smsEditText = onView(withId(R.id.text_editor)).check(matches(isDisplayed())); smsEditText.perform(typeText("abcde")); closeSoftKeyboard(); Thread.sleep(500); // Click on send Button ViewInteraction smsSendButton = onView(withId(R.id.composebtnSend)).check(matches(isDisplayed())); smsSendButton.check(matches(isEnabled())); smsSendButton.perform(click()); Thread.sleep(3000); // Assert for msg Sent delivery

2021-10-23 17:24:22    分类:技术分享    android   automation   android-espresso

Android API 28 模拟器点击问题上的 Espresso 测试(Espresso testing on Android API 28 emulator click issue)

问题 这仅适用于 api 级别为 28 的 Android 设备。单击微调器后尝试匹配文本失败。 两种方法,一种是寻找不是活动的窗口,第二种是寻找弹出菜单: ... // Look for text "Green" in the menu onView(withId(getFieldId(COLOR_ID))).perform(click()); onView(withText("Green")) .inRoot(withDecorView(not(is(rule.getActivity().getWindow().getDecorView())))) // Look for popup menu .perform(click()); // Second spinner, Look for the text "Medium" onView(withId(getFieldId(SIZE_ID))).perform(click()); onView(withText("Medium")).inRoot(RootMatchers.isPlatformPopup()).perform(click()); ... 两者都适用于设备 API <=27 知道为什么这不适用于 28 吗? 谢谢你。 回答1 通过将构建工具版本更新为 28.0.2(原为 28.0.1)并替换所有 android

2021-10-23 17:03:11    分类:技术分享    android   testing   android-espresso

Dynamically add test modules in appComponent dagger 2?(Dynamically add test modules in appComponent dagger 2?)

问题 嗨,可以在我的 AppComponent 中添加测试模块吗? 下面是我对我的 appComponent 的真实表示 @Singleton @Component(modules = arrayOf(MainModule::class, AnalyticsModule::class, MainAndroidBinding::class, AccountAndroidBinding::class, AndroidSupportInjectionModule::class, HomeAndroidBinding::class, NetworkModule::class)) interface ApplicationComponent : AndroidInjector<DaggerApplication> { fun inject(myApplication: MyApplication) override fun inject(instance: DaggerApplication) @Component.Builder interface Builder { @BindsInstance fun application(applicaton: Application): Builder fun build(): ApplicationComponent } }

2021-10-23 07:59:01    分类:技术分享    android   unit-testing   automated-tests   android-espresso   dagger-2

在 Android Espresso 测试中断言异常(Assert exceptions in Android Espresso test)

问题 我在 Espresso 中有一个测试,需要断言某个操作会导致抛出异常。 然而,Espresso 框架似乎吞下了原始异常,只显示PerformException 。 回答1 最终我找到了一种方法来做到这一点。 我创建了一个自定义 Hamcrest 匹配器,它允许您验证嵌套异常。 public class NestedExceptionMatcher extends TypeSafeMatcher<Throwable> { private final Class<?> mExpectedType; private final Matcher<String> mMessageMatcher; static NestedExceptionMatcher expectNestedThrowable(Class<?> expectedType, Matcher<String> messageMatcher) { return new NestedExceptionMatcher(expectedType, messageMatcher); } NestedExceptionMatcher(Class<?> expectedType, Matcher<String> messageMatcher) { mExpectedType = expectedType

2021-10-23 07:42:27    分类:技术分享    android   unit-testing   android-espresso

espresso ActivityTestRule 用于具有泛型类型参数的活动(espresso ActivityTestRule for activity with generic type parameter)

问题 我已经声明了这样的活动 class QuestionnaireActivity<T : ProfileModel> : AppCompatActivity() 我想编写一个浓缩咖啡测试,所以我正在编写 ActivityTestRule 之类的 @Rule @JvmField val activityRule = object : ActivityTestRule<QuestionnaireActivity<ProfileModel.PersonalInfo>>(QuestionnaireActivity<ProfileModel.LifeStyleInfo>::class.java){ override fun getActivityIntent(): Intent = QuestionnaireActivity.getQuestionnaireIntent(InstrumentationRegistry.getTargetContext(), 3, ProfileModel.LifeStyleInfo()) } 但编译器抱怨(它关于 ActivityTestRule 的参数) only classes are allowed on the left hand side of a class literal 这里声明泛型不能与class一起使用。 如果我删除泛型类型参数

2021-10-23 07:29:09    分类:技术分享    android   kotlin   android-espresso

Android Espresso 等待文本出现(Android Espresso wait for text to appear)

问题 我正在尝试使用 Espresso 自动化一个 Android 应用程序,该应用程序是一个聊天机器人。 我可以说我对 Android 应用自动化完全陌生。 现在我在等待中挣扎。 如果我使用Thread.sleep ,它工作得很好。 但是,我想等到特定文本出现在屏幕上。 我怎样才能做到这一点? @Rule public ActivityTestRule<LoginActivity> mActivityTestRule = new ActivityTestRule<>(LoginActivity.class); @Test public void loginActivityTest() { ViewInteraction loginName = onView(allOf(withId(R.id.text_edit_field), childAtPosition(childAtPosition(withId(R.id.email_field),0), 1))); loginName.perform(scrollTo(), replaceText("test@test.test"), closeSoftKeyboard()); ViewInteraction password= onView(allOf(withId(R.id.text_edit_field)

2021-10-22 14:25:51    分类:技术分享    android   chatbot   android-espresso