我的Android Studio项目从来没有做过命令行编译。所有编译都是使用IDE完成的。我试图在持续集成服务器上引入脚本编译,我遇到了一个障碍:我的建立。Gradle如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.foo.myapplication"
minSdkVersion 18
targetSdkVersion 19
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
}
dependencies {
compile project(':library')
compile project(':gdHandheld')
testCompile 'org.jmockit:jmockit:1.28'
testCompile 'junit:junit:4.12'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
当我通过android studio运行时,我的测试运行良好。我使用jmockit作为测试框架,如下所示:
@Test
public void onOptionsItemSelectedRequestHelpTest(@Mocked final MenuItem menuItem,
@Mocked final RequestHelpDialogFragment requestHelpDialogFragment)
{
Assert.assertTrue(true);
}
当我从命令行运行gradlew check
时,然而,(使用gradle-2.14.1-all),然后我认为类路径是不正确的。它抛出错误
java.lang.Exception: Method onOptionsItemSelectedRequestHelpTest should have no parameters
我有理由相信问题是排序的问题。运行单元测试时,jmockit必须出现在类路径上的junit之前。gradlew --debug
几乎证实了顺序是相反的。我需要做些什么才能让jmockit正确地允许junit拥有测试的参数?顺便说一句,我也希望能够有代码覆盖,一旦我得到测试通过(可能与jacoco)。我提到这个只是因为我不想有一个会破坏jacoco兼容性的解决方案
我在junit版本4.12和jmockit版本1.46中遇到了完全相同的问题。我看到建议在gradle配置中添加以下内容,
test {
jvmArgs "-javaagent:${classpath.find {it.name.contains("jmockit") }.absolutePath}"
}
,但这会导致以下错误,
Cannot change dependencies of configuration ':testCompile' after it has been included in dependency resolution
我最终能够通过升级到jmockit 1.8版本来解决原始问题