我设置了Maven的Android测试项目,并按照此处的说明进行操作.基本上我能够设置测试项目,甚至模拟器被识别,但我仍然无法在执行mvn install时在Maven中运行测试(在Eclipse中).如果我尝试执行它,我会收到以下错误:
测试失败:警告(junit.framework.TestSuite $ 1):构造函数中的异常:testPersistAndRead(java.lang.RuntimeException:Stub!(..)warning(junit.framework.TestSuite $ 1):构造函数中的异常:testFileNotExists(java.lang .RuntimeException:Stub!(..)warning(junit.framework.TestSuite $ 1):构造函数中的异常:testCreateFiles(java.lang.RuntimeException:Stub!(..)warning(junit.framework.TestSuite $ 1):构造函数中的异常:testFilesExist(java.lang.RuntimeException:Stub!(..)warning(junit.framework.TestSuite $ 1):构造函数中的异常:testAndroidTestCaseSetupProperly(java.lang.RuntimeException:Stub!(..)
surfire的输出告诉我它嵌套在AndroidTestCase中:
junit.framework.AssertionFailedError:构造函数中的异常:testPersistAndRead(java.lang.RuntimeException:Stub!at android.test.AndroidTestCase.(AndroidTestCase.java:5)[...]
这是我尝试运行的测试.
public class PersistenceManagerTest extends AndroidTestCase {
private final String FILENAME_PREFIX = "test.";
protected void setUp() throws Exception {
super.setUp();
deleteInternalStorageFile();
MockContentResolver resolver = new MockContentResolver();
RenamingDelegatingContext renamingDelegatingContext = new RenamingDelegatingContext(new MockContext(), getContext(), FILENAME_PREFIX);
Context context = new IsolatedContext(resolver, renamingDelegatingContext);
setContext(context);
}
//AfterClass
protected void tearDown() {
deleteInternalStorageFile();
}
public void testPersistAndRead() throws IOException {
String testData = "foobar";
PersistenceManager.persist(testData, FileType.JSONDATA); …Run Code Online (Sandbox Code Playgroud) 我正在测试一个不寻常的情况.我正在使用Espresso来编写我的测试.我知道Espresso和InstrumentationTestCase不是为了做到这一点.
我有一个我在其中一个课程中创建的监听器,它会通知我某个值的变化.我在我的测试套件中使用了监听器.
当我从侦听器获取值时,我需要声明值已更改为此类.
我的问题是测试将在我收到监听器的值之前结束.
private void sendSpeedChanges() {
setStaticSpeed(new Random().nextInt(10) + 2);
try {
runTestOnUiThread(new Runnable() {
@Override
public void run() {
consoleActivity.onSpeedChanged(getStaticSpeed(), false);
}
});
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
private void createSpeedDelegate() {
EspressoMachineValues.setOnSpeedChangeListener(new EspressoMachineValues.OnSpeedChangeListener() {
@Override
public void onSpeedChanged(double speed) {
//assert speed is correct.
assertTrue(getStaticSpeed() == speed);
}
});
}
Run Code Online (Sandbox Code Playgroud)
这些是我正在使用的两种方法.这createSpeedDelegate()是最开始的电话.然后我打电话sendSpeedChanges.我需要做X次.
sendSpeedChanges()在检查了价值之前我无法打电话onSpeedChange()Thread.sleep();因为监听器在主线程上.我试过添加一个getInstrumentation().wait(2000);也getInstrumentation().waitForIdleSync();很明显,没有工作.
在一个完美的世界里,我会这样做:
for (int i …Run Code Online (Sandbox Code Playgroud) 我正试图在不同的CPU状态下测试应用程序在Android上的性能.因此,我想将CPU锁定在1000Mhz并读取读数,然后使CPU过载并读取读数.我的问题是:无论如何要锁定CPU和可能的RAM以某些锁定/冻结率?任何有关此文档的链接都将受到高度赞赏.
我需要匹配由红色矩形突出显示的视图.我应该为它写出哪种Espresso表达方式?

这是一个表格布局,所有单元格都是TextView的实例.单元格视图没有唯一的ID.感兴趣的视图可能包含也可能没有文本.我所知道的是,这种观点总是位于"食品集团"细胞之下.
任何线索都会受到欢迎.
android hamcrest android-layout android-testing android-espresso
我使用的是Android Studio 1.2
假设我在一些MyAdder类中添加了一个简单的方法
public int add(int a,int b) {
return a+b;
}
Run Code Online (Sandbox Code Playgroud)
我想执行单元测试并使用断言来执行上述代码的测试.
我发现很难,首先从官方DEV站点测试基础知识,以便获得执行单元测试的示例代码或详细教程.
我有一个应用程序,其中MainActivity布局由两个TextView(tvName和tvEmail)和一个按钮(btnLogout)组成.
我有这些测试方法的功能测试(最后的代码):
我的问题是,如果我评论testLoginActivityStarts,那么testUserDetailsAreShown传递.但是,当两者都被取消注释时,两者都会失败.
java.lang.NullPointerException
at android.support.test.espresso.intent.Intents.resumedActivitiesExist(Intents.java:235)
at android.support.test.espresso.intent.Intents.intended(Intents.java:184)
at android.support.test.espresso.intent.Intents.intended(Intents.java:169)
at net.example.login.MainActivityTest.testLoginActivityStarts(MainActivityTest.java:46)
Run Code Online (Sandbox Code Playgroud)
和
android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: net.example.login:id/tvName
Run Code Online (Sandbox Code Playgroud)
我认为这是因为testLoginActivityStarts在testUserDetailsAreShown之前执行,并且当testUserDetailsAreShown正在执行时,加载的活动不是MainActivity,而是LoginActivity.
谁能帮我这个?我需要让两个测试通过.我相信他们应该通过.
这里测试代码:
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
private String USER_NAME = "UserName";
private String USER_EMAIL = "UserEmail";
public MainActivityTest(){
super(MainActivity.class);
}
public void testUserDetailsAreShown() {
onView(withId(R.id.tvName)).check(matches(withText(USER_NAME)));
onView(withId(R.id.tvEmail)).check(matches(withText(USER_EMAIL)));
}
public void testLoginActivityStarts() {
onView(withId(R.id.btnLogout)).perform(click());
intended(hasComponent(LoginActivity.class.getName()));
}
}
Run Code Online (Sandbox Code Playgroud) 我在Espresso库上为自定义组件编写UI测试.我有单独的类,扩展ActivityInstrumentationTestCase2<MyActivityDebug>,对于每一个组件,例如:CheckBoxTest,EditTextTest,SelectorText...现在我单独运行测试过.帮助我,我如何从一个地方为所有课程一次性运行所有测试?
如何使用简单的触摸事件测试视图,例如ACTION_DOWN和ACTION_MOVE?
android android-testing android-espresso android-touch-event
我正在运行我的测试使用gcloud firebase测试android运行命令带--use-orchestrator标志来启用Android Test Orchestrator.有一个Orchestrator参数clearPackageData可以清除应用程序在测试之间的状态,我可以在我自己的设备上运行Android Studio测试时使用它:
android {
defaultConfig {
...
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
// The following argument makes the Android Test Orchestrator run its
// "pm clear" command after each test invocation. This command ensures
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
}
testOptions {
execution 'ANDROID_TEST_ORCHESTRATOR'
}
}
dependencies {
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestUtil 'com.android.support.test:orchestrator:1.0.2'
}
Run Code Online (Sandbox Code Playgroud)
但是,当使用上面提到的命令和标志在Firebase测试实验室中运行测试时,此参数设置为false.有没有办法设置这个参数true?
我正在尝试使用androidx测试库的新FragmentScenario API,但是测试无法像这样启动片段场景:
fragmentScenario = launchFragmentInContainer<MyFragment>(args)
stacktrace是:
java.lang.NoSuchMethodError: androidx.fragment.app.FragmentManager.getFragmentFactory()Landroidx/fragment/app/FragmentFactory;
at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:178)
at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:171)
at androidx.test.core.app.ActivityScenario.lambda$onActivity$0$ActivityScenario(ActivityScenario.java:478)
at androidx.test.core.app.ActivityScenario$$Lambda$0.run(Unknown Source)
at org.robolectric.android.fakes.RoboMonitoringInstrumentation.runOnMainSync(RoboMonitoringInstrumentation.java:53)
at androidx.test.core.app.ActivityScenario.onActivity(ActivityScenario.java:471)
at androidx.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScenario.java:170)
at androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:160)
at com.domain.myapp.ui.pck.pkg.MyFragmentTest.setup(MyFragmentTest.kt:656)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
Run Code Online (Sandbox Code Playgroud)
如果我去FragmentManager类(androidx.fragment.app FragmentManager),则没有getFragmentFactory方法,而FragmentScenario.java类(包androidx.fragment.app.testing)清楚地表明该方法不存在:

我猜我的依赖项配置不正确,这是我的app / build.gradle文件:
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "com.domain.app"
minSdkVersion 21
targetSdkVersion 28
versionCode appVersionCode
versionName appVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
}
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
compileOptions …Run Code Online (Sandbox Code Playgroud) android robolectric android-testing android-espresso androidx
android ×10
android-testing ×10
androidx ×1
cpu-speed ×1
cpu-usage ×1
firebase ×1
gcloud ×1
hamcrest ×1
java ×1
junit ×1
maven ×1
performance ×1
robolectric ×1
testing ×1
unit-testing ×1