我正在使用谷歌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) 开始探索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) 我目前正在尝试单独测试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
我最近在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
在我的单元测试中,我使用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)
是否有一些技巧可以使它工作?
我正在尝试编写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 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) 我在build.gradle中做了一些事情来删除androidTest.java包的绿色突出显示.
我不知道怎么回来.
IntelliJ在上下文菜单中有一个"Mark directory as test sources root"选项,但我在Android Studio中找不到等效项.
有没有办法定义这个文件夹,所以我可以开始测试?(如果它意味着什么,测试java文件都有一个"J"的图标,周围有一个红色圆圈)
在 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)
是什么导致它们?它们可以避免吗?
使用最新版本的 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)