当我在我的项目中包含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,编译永远不会超过一分钟.
我知道,在没有具体细节的情况下提出这类问题非常困难; 有问题的项目是专有的,我无法在任何其他项目中重现该问题.
所以我在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
我需要在每次测试之前清空用户的数据
// 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函数中获取上下文?
谢谢
在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) 我在Espresso库上为自定义组件编写UI测试.我有单独的类,扩展ActivityInstrumentationTestCase2<MyActivityDebug>,对于每一个组件,例如:CheckBoxTest,EditTextTest,SelectorText...现在我单独运行测试过.帮助我,我如何从一个地方为所有课程一次性运行所有测试?
我正在尝试为我的Android应用程序编写一个与云服务通信的测试.从理论上讲,测试的流程应该是这样的:
我正在尝试使用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) 我怎样才能使这个工作?我读了很多类似的策略,唉.使用高于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
我正在尝试将本示例中的内容-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
该应用程序包含一个简短显示的启动画面,并且使用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) 我正在尝试使用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。我可以得到一些解释为什么会发生这种情况,或者背后是什么问题吗?我对工作代码不感兴趣,但对问题背后的实际问题更感兴趣。
android ×10
android-espresso ×10
gradle ×2
java ×2
datepicker ×1
jar ×1
junit4 ×1
kotlin ×1
memory ×1
testing ×1