我很难让Robotium在基于gradle的Android Studio上工作,我找不到办法
这是我的build.gradle文件
buildscript {
dependencies {
repositories {
mavenCentral()
mavenLocal()
}
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
/* maven {
url "https://oss.sonatype.org/content/repositories/snapshots"
}*/
}
sourceSets {
testLocal {
java.srcDir file('src/test/java')
resources.srcDir file('src/test/resources')
}
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 15
targetSdkVersion 17
}
sourceSets {
instrumentTest.setRoot('src/test')
}
}
dependencies {
compile 'com.android.support:support-v4:13.0.+'
// Dependencies for the `testLocal` task, make sure to list all your global dependencies here as well
testLocalCompile 'junit:junit:4.11' …Run Code Online (Sandbox Code Playgroud) 每当我尝试UiAutomation在任何测试中使用时getInstrumentation().getUiAutomation(),该进程都会因此异常而崩溃:
java.lang.SecurityException: Permission Denial: getIntentSender() from pid=30334, uid=2000, (need uid=1000) is not allowed to send as package android
at android.os.Parcel.readException(Parcel.java:1540)
at android.os.Parcel.readException(Parcel.java:1493)
at android.app.IUiAutomationConnection$Stub$Proxy.disconnect(IUiAutomationConnection.java:225)
at android.app.UiAutomation.disconnect(UiAutomation.java:240)
at android.app.Instrumentation.finish(Instrumentation.java:197)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:575)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837)
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?我正在使用Gradle通过Android Studio,尝试各种版本,直接调用它adb,即使没有任何外部依赖(显然至少有SDK 18)...总是崩溃.
这是我发现的唯一官方示例:https://www.youtube.com/watch?v =_SlBHUW0ybM
我的基于仪器(espresso)的测试不能在Lollipop +设备和模拟器上运行.它们可以在任何其他平台上正常运行 我和这个帖子中的人有相同的症状 - https://groups.google.com/forum/?fromgroups#!topic/adt-dev/QW5SuzQizNk
我可以执行./gradlew connectedCheck并且测试在使用KitKat的设备上运行良好,但是当我尝试在Lollipop的设备上以相同的方式运行相同的测试时,我得到...
15:02:15.784 [WARN] [org.gradle.api.Task] XT1095上的测试 - 5.1失败:由于'java.lang.NoClassDefFoundError'导致仪表运行失败
15:02:16.011 [WARN] [org.gradle.api.Task] com.android.builder.testing.ConnectedDevice>未找到测试.[XT1095 - 5.1] FAILED
15:02:16.011 [警告] [org.gradle.api.Task]未找到测试.这通常意味着您的测试类不是您的测试运行器期望的形式(例如,不从TestCase继承或缺少@Test注释).
android android-testing android-espresso android-instrumentation
我是Android应用程序开发的新手,我刚做了一个笔记应用程序.我想为数据库的insertNote,readNote和updateNote方法进行单元测试.我该怎么做?这是我的数据库的代码.谢谢.
public class DatabaseManager extends SQLiteOpenHelper {
public static final String Database_Name = "Notes Database";
public static final String Table_Name = "notes";
public static final String Column_id = "textId";
public static final String Column_title = "textTitle";
public static final String Column_body = "textBody";
public DatabaseManager(Context context){
super(context, Database_Name, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE " + Table_Name + " (" + Column_id +
" INTEGER PRIMARY KEY AUTOINCREMENT, " + Column_title +
" TEXT, " + …Run Code Online (Sandbox Code Playgroud) 我有一个库模块,由两个Android应用程序使用,我想将浓缩咖啡测试添加到库模块,以便两个应用程序可以运行常见的测试集.是否有一个示例可用于在库模块中添加espresso测试?
我有一个Android项目(由Cordova生成),我想添加(检测)测试.它只有一个MainActivity.java应该测试.
通常这意味着添加一些依赖项build.gradle并/src/androidTest/java/org/example/package/MainActivityTest.java使用MainActivityTest类和一些测试方法创建文件.(在Android Studio中,我甚至可以通过使用Run - >"Record Espresso Test"生成这些 - 这非常简单且有效).
不幸的是,我现在要求这些测试文件确实存在于项目目录之外.现有的Cordova项目应该只有很小的变化(因为它被重新生成并作为构建工件处理).在MainActivity.java将最好是在同一个根文件夹,Android项目中/android.
我怎样才能做到这一点?
该build.gradle变化可以被添加到build-extras.gradle,真正的文件build.gradle已经包含了,所以这是照顾.
但我不知道如何放置MainActivityTest.java项目文件夹结构的外部,仍然能够在项目内运行它.
对于iOS,您可以使用绝对路径将外部文件链接到项目中.这样的东西在这里也是完美的.
我看了,sourceSets但我不知道如何将这个集成到Cordova Android项目中,该项目已经有了这个非默认值(我想?)sourceSets:
android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
}
...
}
Run Code Online (Sandbox Code Playgroud) android cordova android-testing android-espresso android-instrumentation
我想在框架中测试一个类,该框架基于intent启动不同的服务.但是,我有问题,创建TestService内部的androidTest/连接时,Android的测试正在运行.getService方法返回null.
在此先感谢任何指导和帮助!
@RunWith(AndroidJUnit4.class)
public class WakefulIntentSenderTest {
private static final String SOME_ACTION = "someAction";
private static class TestService extends Service {
private boolean mCalled;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public IBinder onBind(final Intent intent) {
return null;
}
@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {
mCalled = true;
return 0;
}
public boolean wasCalled() {
return mCalled;
}
public class TestServiceBinder extends Binder {
public …Run Code Online (Sandbox Code Playgroud) 我正在阅读有关Android Testing Samples项目的文章,并注意到一个名为Bazel的" 新 "构建工具正用于构建Android项目:
实验性Bazel支持
其中一些示例可以在Linux上使用Bazel构建.这些示例包含一个
BUILD.bazel文件,类似于build.gradle文件.外部依赖项在顶级WORKSPACE文件中定义.这是实验性功能.要运行测试,请按照Bazel网站上的说明安装最新版本的Bazel(0.12.0或更高版本).
然后,
更新#1:更新了farhana的接受答案,感谢Jin提供有关google构建系统的详细信息.
更新#2:更新了谷歌代码实验室,用于bazel android介绍.
我基于“调试”构建变体创建了一个名为“bitrise”的新构建类型。使用“调试”构建变体时,已检测的 androidTests 构建并运行良好,但是当我切换到新的“bitrise”构建变体时,出现以下错误:
Process finished with exit code 1
Class not found: "com.mycompany.app.ui.race.RaceFragmentUiTest"
Run Code Online (Sandbox Code Playgroud)
当我选择“编辑配置...”->“Android Instrumented Tests”时出现此警告

版本
'com.android.tools.build:gradle:3.5.2'
安卓工作室 3.5.2
这是我的 Gradle 文件的摘录:
buildTypes {
debug {
debuggable true
testCoverageEnabled = false
applicationIdSuffix ".debug"
buildConfigField("String", "BASE_ENDPOINT", BASE_ENDPOINT_DEBUG)
}
release {
minifyEnabled true
zipAlignEnabled true
shrinkResources true
buildConfigField("String", "BASE_ENDPOINT", BASE_ENDPOINT_PROD)
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
bitrise {
initWith debug
buildConfigField("String", "BASE_ENDPOINT", BASE_ENDPOINT_PROD)
}
}
flavorDimensions "version"
productFlavors {
mycompany {
dimension "version"
applicationId "com.mycompany.app"
}
second {
dimension "version"
applicationId …Run Code Online (Sandbox Code Playgroud) android gradle android-testing android-gradle-plugin android-gradle-3.0
我们可以通过 stringResource 来获取 Composable 中的字符串资源,例如
@Composable
fun Heading(
@StringRes textResource: Int
) {
Text(
text = stringResource(id = textResource),
color = colorBlack,
)
}
Run Code Online (Sandbox Code Playgroud)
但是我们如何在可组合测试中获取这个字符串资源。
class HeadingTest {
@get:Rule
val composeTestRule = createComposeRule()
@ExperimentalComposeUiApi
@Test
fun headingTest() {
// Start the app
composeTestRule.setContent {
AppTheme {
// In Compose world
Heading(textResource = R.string.some_text)
}
}
//How can I access string resource here
composeTestRule.onNodeWithText(???).assertExists()
}
}
Run Code Online (Sandbox Code Playgroud) android android-testing android-jetpack android-jetpack-compose
android-testing ×10
android ×9
gradle ×3
bazel ×1
cordova ×1
java ×1
junit ×1
robotium ×1
sqlite ×1
ui-testing ×1
unit-testing ×1