标签: android-espresso

Android Espresso - java.lang.OutOfMemoryError:超出GC开销限制

当我在我的项目中包含espresso快照jar时,我的gradle编译挂起然后踢出以下消息:

UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.util.Arrays.copyOf(Arrays.java:2219)
    at java.util.ArrayList.toArray(ArrayList.java:358)
    at java.util.ArrayList.<init>(ArrayList.java:164)
    at com.android.dx.ssa.SsaMethod.getUseListCopy(SsaMethod.java:660)
    at com.android.dx.ssa.ConstCollector.updateConstUses(ConstCollector.java:333)
    at com.android.dx.ssa.ConstCollector.run(ConstCollector.java:147)
    at com.android.dx.ssa.ConstCollector.process(ConstCollector.java:75)
    at com.android.dx.ssa.Optimizer.runSsaFormSteps(Optimizer.java:181)
    at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:99)
    at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:72)
    at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:303)
    at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:139)
    at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:94)
    at com.android.dx.command.dexer.Main.processClass(Main.java:682)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
    at com.android.dx.command.dexer.Main.access$600(Main.java:78)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:596)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
    at com.android.dx.command.dexer.Main.run(Main.java:230)
    at com.android.dx.command.dexer.Main.main(Main.java:199)
    at com.android.dx.command.Main.main(Main.java:103)
:Project:dexFlavorEnterpriseDebug FAILED
Run Code Online (Sandbox Code Playgroud)

根据我的研究,这听起来像是一个依赖性问题.你会怎么建议我去解决这个问题?

我尝试碰撞堆空间(-Xmx2048),但是在我的计算机变得越来越热但未完成时,构建运行了很长一段时间(几分钟).没有这个jar,编译永远不会超过一分钟.

memory android garbage-collection jar android-espresso

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

使用gradle或android studio内部运行测试会导致NoClassDefFoundError

我知道,在没有具体细节的情况下提出这类问题非常困难; 有问题的项目是专有的,我无法在任何其他项目中重现该问题.

所以我在build.gradle文件中添加了以下内容:

androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
    exclude group: 'com.square.dagger'
}
androidTestCompile('com.jakewharton.espresso:espresso-support-v4:1.1-r3') {
    exclude group: 'com.android.support'
}
Run Code Online (Sandbox Code Playgroud)

我也确定了两种产品口味,但都没有.我的测试类是:

   public class MainActivityInstrumentationTest extends ActivityInstrumentationTestCase2<MainActivity> {
       private MainActivity myActivity;
       private Spinner spinner;

       public MainActivityInstrumentationTest() {
         super(MainActivity.class);
        }
        protected void setUp() throws Exception {
          super.setUp();

          myActivity = getActivity();
          spinner = (Spinner)myActivity.findViewById(R.id.watch_category);
        }

        public void testTextView() {
          assertOnScreen(myActivity.getWindow().getDecorView(), spinner);
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在在工作室,它发现MainActivity.class很好,并添加正确的导入.然而; 当我运行测试时,构造函数抛出一个异常,即找不到.class的完全限定路径.我试过跑步gradle,--debug我没有看到任何与众不同的东西.生成的apk文件有一个classes.dex并使用dex2jar我在那里看到MainActivity.class.因此,在测试执行期间找不到类文件的原因有点丢失.有没有人有任何其他方法,我可以尝试调试这种情况,就像我说我有其他项目工作得很好,我无法修改它们来展示这种行为.

对此的任何帮助将不胜感激.

编辑:来自logcat的完整跟踪

W/dalvikvm( 4371): Class resolved by unexpected DEX: Landroid/support/v7/app/ActionBarActivity;(0xa501f5e8):0x94c6a000 ref [Landroid/support/v4/app/FragmentActivity;] Landroid/support/v4/app/FragmentActivity;(0xa501f5e8):0x9528b000
W/dalvikvm( 4371): …
Run Code Online (Sandbox Code Playgroud)

android android-studio android-gradle-plugin android-espresso

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

ActivityTestRule.getActivity在Before方法中返回null

我需要在每次测试之前清空用户的数据

// Kotlin code
fun getActivity() = activityRule.getActivity()

Before
fun setUp() {
    cleanUp(getActivity())
}
Run Code Online (Sandbox Code Playgroud)

我需要获取一个Context才能这样做,但在setUp中,activityRule.getActivity()返回null.

我也尝试过:

Before
fun setUp() {
    val i = Intent()
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
    activityRule.lauchActivity(i)
    cleanUp(getActivity())
}
Run Code Online (Sandbox Code Playgroud)

我有一项活动,但cleanUp的工作时间只有一半(我相信一些竞争条件适用于此)

我想避免在After函数中cleanUp,以便在需要时手动查看我的应用程序状态.

无论如何在Before函数中获取上下文?

谢谢

testing android kotlin android-espresso

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

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

在Google Espresso测试中,我正在尝试单击DatePickerDialog的"确定"按钮.

但不是验证我的输入,它只是添加一年而不关闭对话框.

似乎点击是在年份专栏的"+"按钮上完成的.这是一个Espresso错误还是我错过了什么?

这是我的Espresso代码(在Kotlin中):

onView(allOf(iz(instanceOf(javaClass<Button>())), withText("OK"),
            isDisplayed()) as Matcher<View>).perform(click())
Run Code Online (Sandbox Code Playgroud)

android datepicker android-espresso

2
推荐指数
3
解决办法
2858
查看次数

从一个普通班级运行所有Ui测试

我在Espresso库上为自定义组件编写UI测试.我有单独的类,扩展ActivityInstrumentationTestCase2<MyActivityDebug>,对于每一个组件,例如:CheckBoxTest,EditTextTest,SelectorText...现在我单独运行测试过.帮助我,我如何从一个地方为所有课程一次性运行所有测试?

android android-testing android-studio android-espresso

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

如何在运行测试之前使JUnit4"等待"异步作业完成

我正在尝试为我的Android应用程序编写一个与云服务通信的测试.从理论上讲,测试的流程应该是这样的:

  1. 在工作线程中向服务器发送请求
  2. 等待服务器的响应
  3. 检查服务器返回的响应

我正在尝试使用Espresso的IdlingResource类来完成它,但它没有按预期工作.这是我到目前为止所拥有的

我的测试:

@RunWith(AndroidJUnit4.class)
public class CloudManagerTest {

FirebaseOperationIdlingResource mIdlingResource;

@Before
public void setup() {
    mIdlingResource = new FirebaseOperationIdlingResource();
    Espresso.registerIdlingResources(mIdlingResource);
}

@Test
public void testAsyncOperation() {
    Cloud.CLOUD_MANAGER.getDatabase().getCategories(new OperationResult<List<Category>>() {
        @Override
        public void onResult(boolean success, List<Category> result) {
            mIdlingResource.onOperationEnded();
            assertTrue(success);
            assertNotNull(result);
        }
    });
    mIdlingResource.onOperationStarted();
}
}
Run Code Online (Sandbox Code Playgroud)

FirebaseOperationIdlingResource

public class FirebaseOperationIdlingResource implements IdlingResource {

private boolean idleNow = true;
private ResourceCallback callback;


@Override
public String getName() {
    return String.valueOf(System.currentTimeMillis());
}

public void onOperationStarted() {
    idleNow = false; …
Run Code Online (Sandbox Code Playgroud)

java multithreading android junit4 android-espresso

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

Android:如何使用支持25.0.0的Espresso 2.2.2?

我怎样才能使这个工作?我读了很多类似的策略,唉.使用高于23.1.1的支持库会一次又一次失败.

dependencies {
  compile 'com.android.support:design:25.0.0'
  compile 'com.android.support:support-v4:25.0.0'
  compile files('libs/slf4j-android-1.5.8.jar')
  androidTestCompile 'com.android.support:support-annotations:25.0.0'
  androidTestCompile( 'com.android.support.test:rules:0.5')
  androidTestCompile( 'com.android.support.test.espresso:espresso-contrib:2.2.2')
  androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
 })
}
Run Code Online (Sandbox Code Playgroud)

我收到了这条消息:

警告:与依赖项'com.android.support:recyclerview-v7'冲突.app(25.0.0)和测试app(23.1.1)的已解决版本有所不同.有关详细信息,请参阅http://g.co/androidstudio/app-test-app-conflict.警告:与依赖项'com.android.support:support-v4'冲突.app(25.0.0)和测试app(23.1.1)的已解决版本有所不同.有关详细信息,请参阅http://g.co/androidstudio/app-test-app-conflict.警告:与依赖项'com.android.support:appcompat-v7'冲突.app(25.0.0)和测试app(23.1.1)的已解决版本有所不同.有关详细信息,请参阅http://g.co/androidstudio/app-test-app-conflict.警告:与依赖项"com.android.support:design"冲突.app(25.0.0)和测试app(23.1.1)的已解决版本有所不同.有关详细信息,请参阅http://g.co/androidstudio/app-test-app-conflict.

第1步:我尝试使用排除组...没有用.

第2步:我也尝试了不同的策略,例如:configurations.all {resolutionStrategy {force'com.android.support:support-annotations:23.1.1'}}

第3步:当然我尝试了第一个gradlew:app:dependenices等,但是那个一直在崩溃.是的,我使用的是JDK1.8.这是一个注册的bug,自夏天以来一直没有解决.

顺便说一句...... Android,支持包和Espresso都来自谷歌?

android dependency-management gradle android-espresso android-design-library

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

Android Espresso测试:未找到类:...空测试套件

我正在尝试将本示例中的内容-https://github.com/googlesamples/android-testing/tree/master/ui/espresso/BasicSample-实施到我的应用中。

当我尝试执行简单的Espresso测试时,会发生以下情况:

“ / Applications / Android Studio 2.2.3.app/Contents/jre/jdk/Contents/Home/bin/java”(...)

进程完成,退出代码为1找不到类:“ com.faces_shop.app.MainActivityTest”空测试套件。

(从Android Studio复制粘贴)

考试:

package com.faces_shop.app;

import android.support.test.filters.LargeTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;

/**
 * Created by AnonymizedForReview on 2017-01-12.
 */
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityTest {

    public static final String STRING_TO_BE_TYPED = "Espresso";

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(
            MainActivity.class);

    @Test
    public void …
Run Code Online (Sandbox Code Playgroud)

android gradle android-studio android-gradle-plugin android-espresso

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

CountingIdlingResource的IllegalAccessError

该应用程序包含一个简短显示的启动画面,并且使用IdlingResource通过检测测试对该活动进行测试,以便测试知道启动屏幕何时关闭.问题是SplashActivity在运行API 19的设备上测试期间会抛出与依赖项相关的异常:

import android.support.test.espresso.idling.CountingIdlingResource;
...
private CountingIdlingResource espressoTestIdlingResource =
new CountingIdlingResource("Splash_Delay"); // <-- Exception here line 22
...
Run Code Online (Sandbox Code Playgroud)

应用程序/的build.gradle:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude group: 'com.google.code.findbugs'
        exclude module: 'espresso-idling-resource'
        exclude group: "javax.inject"
    })
    compile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2'

    compile 'com.google.dagger:dagger:2.10'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.10'
    compile 'com.google.dagger:dagger-android:2.10'
    compile 'com.google.dagger:dagger-android-support:2.10'
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.10'

    compile "com.android.support:appcompat-v7:$supportLibraryVersion"
    compile "com.android.support:design:$supportLibraryVersion"
    compile "com.android.support.constraint:constraint-layout:1.0.2"

    compile "com.jakewharton.timber:timber:4.5.1"
    compile "com.squareup.phrase:phrase:1.1.0"
    compile "com.squareup.retrofit2:retrofit:2.2.0"
    compile "com.squareup.retrofit2:converter-gson:2.2.0"
    compile "com.squareup.okhttp3:logging-interceptor:3.7.0"
    compile 'net.danlew:android.joda:2.9.9'

    testCompile 'junit:junit:4.12'
    compile 'com.google.firebase:firebase-crash:10.2.4'
    androidTestCompile 'junit:junit:4.12'
} …
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin android-espresso

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

Android Instrumentation测试:未注册任何仪器错误

我正在尝试使用Espresso编写Android Instrumented测试。运行测试时出现此错误

java.lang.IllegalStateException:未注册任何工具!必须在注册工具下运行。

我无法理解此错误的含义。

我将简要解释我在测试中正在做的事情。我跟着样品由谷歌并给予EspressoTesting教程

@SmallTest
@RunWith(AndroidJUnit4.class)
public class ActivityInputTest {

   @Rule
   public ActivityTestRule<ActivityInput> aiRule = new ActivityTestRule<>(ActivityInput.class);


   @Before
   public void setUp(){}
}
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,错误发生在注解上@Rule。我可以得到一些解释为什么会发生这种情况,或者背后是什么问题吗?我对工作代码不感兴趣,但对问题背后的实际问题更感兴趣。

java android android-studio android-espresso

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