Android CircleCI./gradlew测试命令失败
gradlew测试命令在CircleCI上失败。 当我在本地执行相同的命令时,它工作正常,所有测试用例都通过了。 我附上yml文件,来自CircleCI和我的测试类的日志 这是我的yml文件Android CircleCI./gradlew测试命令失败,android,gradle,android-testing,robolectric,circleci,Android,Gradle,Android Testing,Robolectric,Circleci,gradlew测试命令在CircleCI上失败。 当我在本地执行相同的命令时,它工作正常,所有测试用例都通过了。 我附上yml文件,来自CircleCI和我的测试类的日志 这是我的yml文件 version: 2 jobs: build: working_directory: ~/code docker: - image: circleci/android:api-28 environment: JVM_OPTS: -Xmx4096m
version: 2
jobs:
build:
working_directory: ~/code
docker:
- image: circleci/android:api-28
environment:
JVM_OPTS: -Xmx4096m
CC_TEST_REPORTER_ID: XXXXXXXXXXXXXXXXXX
steps:
- checkout
- restore_cache:
key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }}
# - run:
# name: Chmod permissions #if permission for Gradlew Dependencies fail, use this.
# command: sudo chmod +x ./gradlew
- run:
name: Download Dependencies
command: ./gradlew androidDependencies
- save_cache:
paths:
- ~/.gradle
key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }}
# - run:
# name: Run Lint Tests
# command: ./gradlew lint test
- run:
name: Run Tests
command: ./gradlew test --info
# - run:
# name: Run Instrument Tests
# command: ./gradlew connectedAndroidTest
- store_artifacts: # for display in Artifacts: https://circleci.com/docs/2.0/artifacts/
path: app/build/reports
destination: reports
- store_test_results: # for display in Test Summary: https://circleci.com/docs/2.0/collect-test-data/
path: app/build/test-results
当我检查CircleCI的日志时,以下是日志:
在工件上执行transform IdentityTransform->IdentityTransform
core.jar(com.google.zxing:core:3.3.0)执行转换
IdentityTransform->artifact protobuf-java.jar上的IdentityTransform
(com.google.protobuf:protobufjava:2.6.1)执行转换
标识转换->工件上的标识转换
backport-util-concurrent.jar
(backport util concurrent:backport util concurrent:3.1)执行
变换标识变换->工件上的标识变换
xercesMinimal.jar(nekohtml:xercesMinimal:1.9.6.2)执行转换
IdentityTransform->artifact nekohtml.jar上的IdentityTransform
(nekohtml:nekohtml:1.9.6.2)执行transform MockableJarTransform
在文件/opt/android/sdk/platforms/android-28/android.jar中启动
过程“梯度测试执行器2”。工作目录:
/home/circleci/code/app命令:
/usr/lib/jvm/java-8-openjdk-amd64/bin/java-Djava.awt.headless=true
-Djava.security.manager=worker.org.gradle.process.internal.worker.child.BootstrapSecurityManager
-Dorg.gradle.native=false-noverify-Dfile.encoding=UTF-8-Duser.country-Duser.language=en-Duser.variant-ea-cp/home/circleci/.gradle/caches/4.10.1/workerMain/gradle-worker.jar
worker.org.gradle.process.internal.worker.GradleWorkerMain'gradle
测试执行器2'已成功启动进程'Gradle测试执行器2'
com.mindvalley.mva.loginmodule.LoginActivityTest>isSkipLoginVisible
标准输出
[Robolectric]com.mindvalley.mva.loginmodule.LoginActivityTest.isSkipLoginVisible:
sdk=28;资源=二进制
调用loadFromPath(/system/framework/framework-res.apk,true);模式=二进制sdk=28
com.mindvalley.mva.loginmodule.LoginActivityTest>isSkipLoginVisible
跳过
任务:应用程序:testInternalReleaseUnitTest失败:应用程序:testInternalReleaseUnitTest(线程[任务工作线程]:'线程
2,5,主)已完成。花了3.413秒
失败:生成失败,出现异常
- 错误:任务执行失败:应用程序:testInternalReleaseUnitTest 进程“Gradle Test Executor 2”以非零退出值137结束此问题可能是由不正确的测试进程引起的 配置请参阅中的测试执行部分 用户指南
- 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--debug选项运行以获得更多日志输出。使用--scan运行以获取 充分的洞察力
- 得到更多的帮助
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE, application = MockApplication.class)
public class LoginActivityTest {
private LoginActivity activity;
@Before
public void setup() {
activity = Robolectric.buildActivity(LoginActivity.class).create().resume().get();
}
@Test
public void shouldNotBeNull() {
Assert.assertNotNull(activity);
}
/**
* check by default visibility. It should be not visible
* Once we change variable in Login module it should be Visible
*/
@Test
public void isSkipLoginVisible() {
TextView skipLogin = activity.findViewById(com.mindvalley.loginmodule.R.id.skip_login);
LoginModule.getInstance().setSkipLogin(false);
activity.setSkipLoginVisibility();
Assert.assertTrue(skipLogin.getVisibility() == View.GONE);
LoginModule.getInstance().setSkipLogin(true);
activity.setSkipLoginVisibility();
Assert.assertTrue( skipLogin.getVisibility() == View.VISIBLE);
}
@Test
public void enableActionButtonTest() {
CustomFeedbackText loginButton = activity.findViewById(com.mindvalley.loginmodule.R.id.login_btn_login);
String email = "";
String password = "";
activity.enableActionButton(email, password);
Assert.assertTrue(!loginButton.isEnabled());
email = "harsh@mindvalley.com";
password = "123";
activity.enableActionButton(email, password);
Assert.assertTrue(loginButton.isEnabled());
}
@Test
public void skipLoginClicked() {
TextView skipLogin = activity.findViewById(com.mindvalley.loginmodule.R.id.skip_login);
Assert.assertTrue(!PreferenceManager.getBoolean(LoginModule.SKIP_LOGIN, false));
skipLogin.performClick();
Assert.assertTrue(PreferenceManager.getBoolean(LoginModule.SKIP_LOGIN, false));
}
@Test
public void sanitizeLogin() {
String email = "";
String password = "";
Assert.assertTrue(!activity.sanitizeLogin(email, password));
email = "harsh";
password = "";
Assert.assertTrue(!activity.sanitizeLogin(email, password));
email = "harsh@mindvalley";
password = "";
Assert.assertTrue(!activity.sanitizeLogin(email, password));
email = "harsh@mindvalley.com";
password = "";
Assert.assertTrue(!activity.sanitizeLogin(email, password));
email = "harsh@mindvalley.com";
password = "test";
Assert.assertTrue(!activity.sanitizeLogin(email, password));
email = "harsh@mindvalley.com";
password = "test123";
Assert.assertTrue(activity.sanitizeLogin(email, password));
}
@Test
public void loginClicked() {
CustomFeedbackText loginButton = activity.findViewById(com.mindvalley.loginmodule.R.id.login_btn_login);
EditText emailEditText = activity.findViewById(com.mindvalley.loginmodule.R.id.login_edittext_email);
EditText passwordEditText = activity.findViewById(com.mindvalley.loginmodule.R.id.login_edittext_password);
emailEditText.setText("harsh@mindvalley.com");
passwordEditText.setText("test123");
loginButton.performClick();
Assert.assertTrue(Util_Auth0.getInstance().getAndroidClient() != null);
// test update prefs method
activity.updatePrefs();
Assert.assertTrue(!PreferenceManager.getBoolean(LoginModule.SKIP_LOGIN, false));
Assert.assertTrue(PreferenceManager.getBoolean(LoginModule.SIGNED_IN, false));
}
@After
public void tearDown() {
activity = null;
}
}
这里有答案
这是stackoverflow答案的链接
谢谢Christian Williams