Tag: android espresso

Android Espresso – 如何在所有测试中只运行一次安装程序

我正在使用Espresso / Kotlin来运行我们的Android应用程序的测试,我想在给定的测试类中的所有测试运行一次。 我创建了一个伴侣对象来启动应用程序一次(它这样做),然而它随后关闭,并且在每次测试运行时都不会保持打开状态。 我怎样才能启动应用程序,运行测试类中的所有测试,然后关闭应用程序? 我也尝试了以下,但它仍然启动一次然后关闭,然后尝试运行测试:

用MVP + Dagger进行Android测试2

我使用依赖注入框架Dagger 2使用模式MVP创建Android应用程序。 应用程序具有用于将请求发送到REST的自定义IntentService。 每个活动都有自己的Dagger组件,用于提供包括Presenter(表示层)和Interactor(模型层)类的所有必需对象。 Presenter包含没有Android SDK的代码 – 只有逻辑。 Interactor可以启动IntentService来接收数据,包含ApplicationContext等 为了测试我的Java / Kotlin类,我使用了JUnit和我自己的模拟类。 对于使用Android SDK的Instrumented测试,我正在使用Espresso 。 这里是简单的测试我如何做(Kotlin): @RunWith(AndroidJUnit4::class) @MediumTest class SampleBehaviorTest : UiBehaviorTestBase() { @get:Rule val rule = IntentsTestRule<SampleActivity>(SampleActivity::class.java, true, false) @Inject lateinit var someService: SomeService @Before fun setUp() { (getApp().buildSampleComponent() as MockSimpleComponent).inject(this) val intent = Intent() rule.launchActivity(intent) } @Test fun should_display_trade_on_receive() { someService.doSomeJob() // Assert […]

Android咖啡无障碍检查失败

我正在尝试在Android Studio中运行Espresso测试(用Kotlin编写),并启用AccessibilityChecks ,如此处所述。 当我尝试在测试中使用AccessibilityChecks时,出现以下错误: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/common/base/Preconditions; at android.support.test.espresso.accessibility.AccessibilityChecks.enable(AccessibilityChecks.java:80) 如果我尝试将它移动到Before类,如文档中所述: 然后它会失败,错误' 空测试套件 ':

Android Epresso:DatePicker点击确定添加一年而不是验证

在Google Espresso测试中,我试图点击DatePickerDialog的确定按钮。 但不是验证我的输入,它只是添加一年,不关闭对话框。 看来,点击是在年份栏的“+”按钮上完成的。 这是一个咖啡的错误还是我错过了什么? 这是我的浓咖啡代码(在Kotlin): onView(allOf(iz(instanceOf(javaClass<Button>())), withText("OK"), isDisplayed()) as Matcher<View>).perform(click())

Android Espresso – 如何查看视图在活动结束前匹配?

我正在编写使用Kotlin和Espresso进行UI测试的Android应用程序。 给定与按钮的活动。 通过点击那个按钮应该出现Toast消息与文本“你好#_#世界”和活动应该完成。 示例代码: fun onButtonClick() { Toast.makeText(this, "Hello#_#World", Toast.LENGTH_SHORT).show() finish() } 在UI测试中,我需要检查Toast消息的文本。 但是Activity在检查之前完成了,所以我从Espresso中捕获了NoActivityResumedException。 这是我的测试方法: @Test fun should_display_message_on_success() { onView(withId(R.id.test_button)).perform(click()) onView(withText("Hello#_#World")) .inRoot(withDecorView(not(rule.activity.window.decorView))) .check(matches(isDisplayed())) } 在活动完成之前如何调用#.check()方法?

使用Espresso的Android仪器测试失败:NoSuchMethodError javax.inject.Provider中的get()

当我运行我的Android仪器测试时,Espresso类初始化失败,出现以下堆栈跟踪: java.lang.NoSuchMethodError: No interface method get()Ljava/lang/Object; in class Ljavax/inject/Provider; or its super classes (declaration of 'javax.inject.Provider' appears in /data/app/com.myapp.mock.debug-2/base.apk) at android.support.test.espresso.DaggerBaseLayerComponent.idlingResourceRegistry(DaggerBaseLayerComponent.java:101) at android.support.test.espresso.Espresso.<clinit>(Espresso.java:52) … 我不知道这是否相关,但我的项目使用Kotlin。 任何想法?

什么id名称约定是好的Kotlin机器人扩展

使用Kotin的Android扩展我可以避免使用findViewById ,但林不知道如何命名ID来使用它的属性。 我发现两个选项是: 使用简单的ID名称, 但如果我使用碎片,可能会遇到意式咖啡的麻烦 : android.support.test.espresso.AmbiguousViewMatcherException:'与id:… / mainLayout'匹配层次结构中的多个视图。 这是因为我有一个TabLayout里面有两个相同ID的片段: <LinearLayout android:id="@+id/mainLayout" 与所有者姓名: "@+id/loginMainLayout"和"@+id/signUpMainLayout" 但是,我将不得不使用像signUpMainLayout.doSomething()这样的变量。 注意:在这种情况下,我不喜欢使用_ ,因为这不是一个好的代码风格 。 还有什么其他的选择?

java.lang.AbstractMethodError:用Mockito在Kotlin上运行espresso时的抽象方法

我有一个使用mockito的器乐浓缩咖啡测试。 测试类如下。 import android.support.test.InstrumentationRegistry import android.support.test.rule.ActivityTestRule import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.RuleChain import org.junit.rules.TestRule import android.support.test.espresso.Espresso.onView import android.support.test.espresso.assertion.ViewAssertions.matches import android.support.test.espresso.matcher.ViewMatchers.withId import android.support.test.espresso.matcher.ViewMatchers.withText import org.mockito.Mockito.`when` class MainActivityTest { val component = TestComponentRule(InstrumentationRegistry.getTargetContext()) val main = ActivityTestRule(MainActivity::class.java, false, false) // TestComponentRule needs to go first so we make sure the ApplicationTestComponent is set // in […]

你怎么得到一个Idlingresource工作在Kotlin与协程

我的Espresso怠速资源不工作 – 它编译并运行,但不再等待足够长的时间来从“网络”返回结果。 从https://github.com/chiuki/espresso-samples/tree/master/idling-resource-okhttp开始 将主要活动转换为Kotlin – test(仍然在java中)仍然可以与OKHttpIdlingResource一起使用 转换到anko协程调用,而不是retrofit.enqueue – 测试不再起作用。 以下是MainActivity的全部新代码 import android.app.Activity import android.os.Bundle import android.widget.TextView import kotlinx.coroutines.experimental.android.UI import kotlinx.coroutines.experimental.async import org.jetbrains.anko.coroutines.experimental.bg import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) doCallAsync() } private fun doCallAsync() = async(UI) { val user = bg { getUser() } val […]

kotlin +特浓咖啡:找不到活动

一年之后回到Android开发者,我又一次又一次对espresso感到困惑-_- 我只是想设置一个简单的咖啡测试,它没有说: java.lang.RuntimeException:找不到活动。 你忘了通过调用getActivity()或startActivitySync或类似的工具来启动这个活动吗? 事实上,我没有看到该应用程序正在启动。 这里是代码: @RunWith(AndroidJUnit4::class) @LargeTest class EfficioTest { @get:Rule @JvmField var activityRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java) private fun getActivity() = activityRule.activity @Test fun testInitState() { onView(withId(R.id.store_spinner)).check(matches(isDisplayed())) } } MainActivity在清单中,使用启动器启动时工作正常。 我错过了什么?