用gradle测试一个android项目的junit测试

时间:2013-06-20 10:03:28

标签: android junit gradle junit4 robolectric

我正在尝试让测试(junit和robolectric)在Android项目中工作,但我完全陷入困境。我的主要问题是我用gradle找到的所有测试都以某种方式拉入了java插件,然后我收到了这个错误:

The 'java' plugin has been applied, but it is not compatible with the Android plugins.

我目前看到的唯一出路是分成测试和应用项目 - 但我想避免这种情况。任何示例/提示都将受到高度赞赏!

the official documentation中没有提到单元测试 - 只有Instrumentation-Tests - 但我希望单元测试能够快速获得结果。

5 个答案:

答案 0 :(得分:27)

您不需要Java插件,因为从目前为止我所看到的Android将主要处理您需要的内容。

我设法通过这个人的博客运行我的Robolectric和junit测试:http://tryge.com/2013/02/28/android-gradle-build/

我的build.gradle文件如下所示(我的测试文件位于{projectdir} / test目录中。

...
// Unit tests

sourceSets {
        unitTest {
                java.srcDir file('test')
                resources.srcDir file('test/resources')
        }
}

dependencies {
        unitTestCompile files("$project.buildDir/classes/debug")
        unitTestCompile 'junit:junit:4.11'
        unitTestCompile 'org.robolectric:robolectric:2.1.1'
        unitTestCompile 'com.google.android:android:4.0.1.2'
}

configurations {
        unitTestCompile.extendsFrom runtime
        unitTestRuntime.extendsFrom unitTestCompile
}

task unitTest(type:Test, dependsOn: assemble) {
        description = "run unit tests"
        testClassesDir = project.sourceSets.unitTest.output.classesDir
        classpath = project.sourceSets.unitTest.runtimeClasspath
}

build.dependsOn unitTest

答案 1 :(得分:7)

AndroidStudio和新的Android Gradle插件现在提供官方单元测试支持。

Android Studio 1.1+和Android Gradle插件版本1.1.0 +

支持此功能

现在可以将依赖关系声明为testCompile:

dependencies {
  testCompile 'junit:junit:4.12'
  testCompile "org.mockito:mockito-core:1.9.5"
}

此处有更多详情:Unit testing support - Android Tools Project Site

答案 2 :(得分:1)

本指南可能有所帮助 - http://www.slideshare.net/tobiaspreuss/how-to-setup-unit-testing-in-android-studio

最新的gradle测试应该在androidTest目录下

同样在你的gradle.build中:

dependencies {
     androidTestCompile 'junit:junit:4.+'
}

还会在 defaultConfig {

下添加
testPackageName "test.java.foo"
testInstrumentationRunner "android.test.InstrumentationTestRunner"

}

答案 3 :(得分:0)

您应该使用此文档 https://developer.android.com/training/testing/unit-testing/local-unit-tests.html 它描述了在开发者机器上运行的非检测单元测试,而不是在Android设备上运行。

答案 4 :(得分:0)

这只适用于我:

<form class="form-horizontal" action="{{action('onlyController@postIndex')}}" method="POST">
                    {!! csrf_field() !!}
                    @foreach($product as $pro)

                        <input type="hidden" name="product_id" value="{{$pro->id}}" />

                        <div class="form-group">
                            <label for="inputName" class="col-sm-2 control-label">الاسم </label>

                            <div class="col-sm-10">
                                <input type="text" class="form-control" name="username" id="inputName" placeholder="الاسم " required>
                            </div>

                        </div>
                        <div class="form-group">
                            <label for="inputEmail" class="col-sm-2 control-label">الاميل </label>

                            <div class="col-sm-10">
                                <input type="email" class="form-control" name="email" id="inputEmail" placeholder="الاميل" required>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">نص التعليق </label>

                            <div class="col-sm-10">
                                <textarea class="form-control" rows="5" name="comment" maxlength="1000" required></textarea>
                            </div>
                        </div>

                        <div class="reviews">
                            <ul>
                                <li>
                                    <label class="col-sm-2 control-label">التقييم </label>
                                    <span>ردئ</span>
                                    <div class="pro-rate">
                                        <span class="fa fa-star" data-rate="1" ><input type="hidden" name="evaluation[]" id="1" value="1"></span>
                                        <span class="fa fa-star" data-rate="2" ><input type="hidden" name="evaluation[]" id="2" value="2"></span>
                                        <span class="fa fa-star" data-rate="3" ><input type="hidden" name="evaluation[]" id="3" value="3"></span>
                                        <span class="fa fa-star" data-rate="4" ><input type="hidden" name="evaluation[]" id="4" value="4"></span>
                                        <span class="fa fa-star" data-rate="5" ><input type="hidden" name="evaluation[]" id="5" value="5"></span>
                                    </div>
                                    <span>ممتاز</span>
                                </li>
                            </ul>
                        </div>
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn ">ارسال </button>
                            </div>
                        </div>


                    @endforeach
                    </form>