标签: android-testing

Espresso - 使用异步加载的数据断言TextView

我正在使用谷歌Espresso for Android编写UI测试,我一直坚持如何断言TextView文本,这些内容是从Web服务异步加载的.我目前的代码是:

public class MyTest extends BaseTestCase<MyActivity>{
    public void setUp() throws Exception {
        // (1) Tell the activity to load 'element-to-be-loaded' from webservice
        this.setActivityIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("data://data/element-to-be-loaded")));
        getActivity();

        super.setUp();
    }

    public void testClickOnReviews(){
        // (2) Check the element is loaded and its name is displayed
        Espresso
            .onView(ViewMatchers.withId(R.id.element_name))
            .check(ViewAssertions.matches(ViewMatchers.withText("My Name")));

        // (3) Click on the details box
        Espresso
            .onView(ViewMatchers.withId(R.id.details_box))
            .check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
            .perform(ViewActions.click());

        // (4) Wait for the details screen to open
        Espresso
            .onView(ViewMatchers.withId(R.id.review_box));

        // Go back to element screen
        Espresso.pressBack();
    }
} …
Run Code Online (Sandbox Code Playgroud)

android android-testing android-espresso

14
推荐指数
1
解决办法
2万
查看次数

运行Espresso测试时,Dagger代码给出NoClassDefFoundError,正常运行正常

开始探索Espresso 2.0,但似乎遇到了打嗝.我无法让测试成功运行任何包含Dagger的项目.当我运行测试时,我得到以下异常(最后的整个堆栈跟踪):

java.lang.NoClassDefFoundError: com/pdt/daggerexample/model/DaggerExampleAppModule$$ModuleAdapter$ProvideMySingletonProvidesAdapter
Run Code Online (Sandbox Code Playgroud)

应用程序在未从AndroidInstrumentationTest运行时运行.

以下是一些相关文件,我还将项目上传到github,以便更快地结账/复制https://github.com/paul-turner/espressoDaggerExample.

的build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.pdt.daggerexample"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
        }


    }

    packagingOptions {
        exclude 'LICENSE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.jakewharton:butterknife:5.1.1'
    compile 'com.squareup.dagger:dagger:1.2.2'
    provided 'com.squareup.dagger:dagger-compiler:1.2.2' …
Run Code Online (Sandbox Code Playgroud)

android android-testing dagger android-espresso

14
推荐指数
1
解决办法
4736
查看次数

如何进行单元测试(使用JUnit或mockito)recyclelerview项目点击

我目前正在尝试单独测试recyclerview addonitemclick listner,使用junit或mockito.这是我的代码:

private void mypicadapter(TreeMap<Integer, List<Photos>> photosMap) {
    List<PhotoListItem> mItems = new ArrayList<>();

    for (Integer albumId : photosMap.keySet()) {
        ListHeader header = new ListHeader();
        header.setAlbumId(albumId);
        mItems.add(header);
        for (Photos photo : photosMap.get(albumId)) {
            mItems.add(photo);
        }


        pAdapter = new PhotoViewerListAdapter(MainActivity.this, mItems);
        mRecyclerView.setAdapter(pAdapter);
        //  set 5 photos per row if List item type --> header , else fill row with header.
        GridLayoutManager layoutManager = new GridLayoutManager(this, 5);
        layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                if (mRecyclerView.getAdapter().getItemViewType(position) == PhotoListItem.HEADER_TYPE)
                    // return …
Run Code Online (Sandbox Code Playgroud)

android mocking android-testing android-recyclerview android-junit

14
推荐指数
1
解决办法
5139
查看次数

Android Gradle插件中的testOptions.animationsDisabled属性有什么作用?

我最近在Android Gradle插件中发现了属性testOptions.animationsDisabled.

我希望这将有助于与咖啡执行UI测试时禁用我的设备上的动画,但它不是,即我还是要手动禁用动画或使用一个几个 选项可用.否则一些UI测试变得不稳定.

由于这个属性的描述相当短,有没有人知道它的用途是什么意思?

我的gradle文件如下:

apply plugin: 'com.android.application'
android {
    testOptions {
        animationsDisabled = true
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

android android-testing android-gradle-plugin android-espresso

14
推荐指数
2
解决办法
1817
查看次数

不能在androidTest中使用Kotlin反引号的方法名称 - 错误的描述符异常

在我的单元测试中,我使用Kotlin的反引号方法来提高可读性,例如

@Test fun `Foo should return bar`()
Run Code Online (Sandbox Code Playgroud)

它适用于<module>/src/test目录中的测试,但是当我尝试执行相同操作时,<module>/src/androidTest我得到一个异常:

Error:java.lang.IllegalArgumentException: bad descriptor: Lcom/packageName/MainActivityTest$Foo should return bar$1;
Error:Execution failed for task ':sample:transformClassesWithDexBuilderForDebugAndroidTest'. > com.android.build.api.transform.TransformException: org.gradle.tooling.BuildException: com.android.dx.cf.iface.ParseException: bad descriptor: Lcom/packageName/MainActivityTest$Foo should return bar$1;
Run Code Online (Sandbox Code Playgroud)

是否有一些技巧可以使它工作?

android unit-testing kotlin android-testing

14
推荐指数
2
解决办法
967
查看次数

在Robolectric中找不到@Config常量参数

我正在尝试编写Robolectric测试。我正在关注一些似乎正在使用的教程

@RunWith(RobolectricTestRunner::class)
@Config(constants = BuildConfig::class)
Run Code Online (Sandbox Code Playgroud)

设置测试,但是在我的情况下,参数常量似乎无法解析。

在此处输入图片说明

我的Robolectric依赖性如下所示:

testImplementation "org.robolectric:robolectric:4.0.2"
Run Code Online (Sandbox Code Playgroud)

android robolectric android-testing android-junit

14
推荐指数
2
解决办法
1689
查看次数

当我运行我的Android UIAutomator代码时,它显示错误

当我运行我的Android UIAutomator代码时,它显示以下错误.

INSTRUMENTATION_RESULT:shortMsg = java.lang.RuntimeException
INSTRUMENTATION_RESULT:longMsg = com.android.ui.testing
INSTRUMENTATION_CODE:0

我刚刚运行了developer.android.com中给出的示例代码
如何解决此错误?

日志附在下面:

01-05 01:07:53.559: D/AndroidRuntime(5712): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
01-05 01:07:53.559: D/AndroidRuntime(5712): CheckJNI is ON
01-05 01:07:53.559: E/AndroidRuntime(5712): cannot open customer xml file
01-05 01:07:53.559: E/AndroidRuntime(5712): /system/csc/customer.xml can't open file
01-05 01:07:53.564: D/AndroidRuntime(5712): readGMSProperty: start
01-05 01:07:53.564: D/AndroidRuntime(5712): readGMSProperty: already setted!!
01-05 01:07:53.564: D/AndroidRuntime(5712): readGMSProperty: end
01-05 01:07:53.589: D/dalvikvm(5712): Trying to load lib libjavacore.so 0x0
01-05 01:07:53.599: D/dalvikvm(5712): Added shared lib libjavacore.so 0x0
01-05 01:07:53.609: D/dalvikvm(5712): Trying to load …
Run Code Online (Sandbox Code Playgroud)

android ui-automation android-testing

13
推荐指数
1
解决办法
5795
查看次数

Android Studio标记目录作为测试源根目录

我在build.gradle中做了一些事情来删除androidTest.java包的绿色突出显示.

我不知道怎么回来.

IntelliJ在上下文菜单中有一个"Mark directory as test sources root"选项,但我在Android Studio中找不到等效项.

有没有办法定义这个文件夹,所以我可以开始测试?(如果它意味着什么,测试java文件都有一个"J"的图标,周围有一个红色圆圈)

android unit-testing intellij-idea android-testing

13
推荐指数
1
解决办法
4588
查看次数

运行 Android 仪器测试时出现重复类警告

在 Android Studio (3.5) 中创建新的空活动项目并运行生成的检测测试时,我收到以下警告:

W/zygote: Found duplicate classes, falling back to extracting from APK : /data/app/com.example.myapplication.test-888XseHjUJwZJ8YXwEvomw==/base.apk
W/zygote: NOTE: This wastes RAM and hurts startup performance.
W/zygote: Found duplicated class when checking oat files: 'Ljunit/runner/BaseTestRunner;' in /data/app/com.example.myapplication.test-888XseHjUJwZJ8YXwEvomw==/base.apk and /system/framework/android.test.runner.jar
Run Code Online (Sandbox Code Playgroud)

是什么导致它们?它们可以避免吗?

android android-testing android-studio android-espresso

13
推荐指数
1
解决办法
2074
查看次数

测试错误:MyActivity已经设置内容。如果您已使用 ComposeView 填充 Activity,请确保在该 ComposeView 上调用 setContent

使用最新版本的 Compose 1.2.0 运行 Robolectric 单元测试时,测试createAndroidComposeRule失败并出现以下错误:

MyActivity 已经设置了内容。如果您已使用 ComposeView 填充 Activity,请确保在该 ComposeView 上调用 setContent,而不是在测试规则上调用;并确保setContent {}在 ComposeTestRule 运行后完成调用

来自失败测试之一的代码:

composeTestRule.setContent {
    Column {
        Text(textTitle)
        DemoScopedInjectedViewModelComposable()
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-testing android-jetpack-compose

13
推荐指数
2
解决办法
3848
查看次数