我正在尝试让测试(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 - 但我希望单元测试能够快速获得结果。
答案 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"
}
答案 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>