jmockit with gradle under android studio



我的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版本来解决原始问题

相关内容

最新更新