有没有人能够在Android Studio中运行测试(从GUI而不是终端),我无法从GUI运行测试。
每次我尝试通过GUI运行测试时,我都会收到以下消息:
我可以使用以下命令从终端运行测试:
./gradlew connectedAndroidTest
我在 Mac OSX
上运行 Android Studio 0.5.2 Gradle 1.11 with Plugin 0.9.0我的项目结构如下;
MyProject/
src/
androidTest/
java/
com.myproject.app.test/
… (tests source code) …
main/
java/
com.myproject.app/
… (source code) …
res/
… (resources code) …
build.gradle
我的build.gradle文件类似于以下内容:
…
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
versionCode 12
versionName "2.0"
minSdkVersion 9
targetSdkVersion 19
testPackageName "com.test.foo"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
}
…
如果有人有任何建议,我会非常高兴在这里。
答案 0 :(得分:25)
今天我在一些Espresso测试中遇到了同样的问题,这让我很生气,因为一切看起来都很正常。最后我发现问题是因为用@BeforeClass
注释的方法(用于标记必须在类中的任何测试方法之前执行的方法的注释)抛出异常。之所以花费我的时间超过预期,是因为如果该方法出现问题,则运行选项卡的日志窗口中不会显示异常的堆栈跟踪< / em>但是在 Android监视器选项卡的日志窗口
如果您想重现问题,只需将其添加到测试类中:
@BeforeClass
public static void setupClass() {
throw new RuntimeException("Sorry dude, you won't find any test!");
}
答案 1 :(得分:9)
This can happen when the type of your run configuration is incorrect.
With me, this goes wrong when running an Espresso test with Kotlin: it somehow creates an Android JUnit test which is the wrong type. Manually creating an Android Instrumented Test solves the problem.
答案 2 :(得分:4)
好的,我找到了问题的原因。
位于项目的.idea文件夹中的 misc.xml 文件中, ProjectRootManager 组件的属性值无效,如下所示:
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.6 (3)" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
所以将project-jdk-name属性值更改为“1.6”,为我解决了问题。以下是我更新值后的样子。
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
希望这可以帮助任何人。
答案 3 :(得分:2)
以上都不适合我(无效缓存...)。
有效的是:
然后它莫名其妙地起作用了。
答案 4 :(得分:2)
正如here在azizbekian中由Android 10 API 29 documentation提到的那样,当应用程序首次针对API29在模拟器上运行测试时,可能会发生此问题。
模拟器可能正在等待用户在显示以下内容的屏幕上输入:
选择允许TestServices访问的内容
此处的文档中有关于此的更多信息,但似乎某些版本的android-test依赖项存在一个已知问题,可能导致此提示出现。
https://developer.android.com/about/versions/10/privacy/changes?hl=en#user-permission-legacy-apps
因此,请务必检查模拟器上的屏幕。就我而言,问题是我的仿真器正在等待确认,如链接的SO问题和Android文档中的屏幕截图所示,已向TestServices组件授予了存储权限。
答案 5 :(得分:1)
就我而言,我没有将测试类声明为 public。
答案 6 :(得分:1)
在我的情况下,问题出在模拟器上,当我在真实设备上进行测试时,错误消失了。
答案 7 :(得分:1)
要使用Kotlin在Android移动设备上运行检测测试用例,请添加以下内容 东西进入您的应用程序build.gradle:
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
添加以下权限:
dependencies {
testImplementation 'junit:junit:4.12'
testImplementation 'androidx.test.ext:junit:1.1.1'
androidTestUtil 'androidx.test:orchestrator:1.2.0'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'
}
我在下面的gradle版本中使用过:
distributionUrl = https://services.gradle.org/distributions/gradle-5.4.1-all.zip
buildscript {
ext.kotlin_version = '1.3.71'
repositories {
flatDir { dirs './lib' }
google()
mavenCentral()
jcenter()
maven { url 'https://plugins.gradle.org/m2/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
然后在src-> androidTest-> java-> com.example.demo->中创建类DemoTest.kt。
如果需要上下文,请通过InstrumentationRegistry.getInstrumentation().targetContext
如果您的测试用例需要任何权限,请添加以下规则:
@Rule
@JvmField
var permissionRule: GrantPermissionRule = GrantPermissionRule.grant(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN)
您可以在内部进行所有设置:
@Before
fun setup() {
// Do initial setup here
}
然后编写这样的测试用例:
@Test
fun testFunctionality() {
// write your code here
}
答案 8 :(得分:1)
仅出于后代考虑,这是对我有用的解决方案-
如果由于某种原因AS认为您将要运行的测试是单元测试而不是仪器测试,则会发生您看到的错误。通常,只需单击软件包而不是实际的类,该错误就会消失。
位于https://github.com/googlecodelabs/android-testing/issues/27#issuecomment-219074863
我只是通过右键单击程序包名称并选择“在'{packageName}中运行'测试'”来运行测试。
答案 9 :(得分:1)
对我来说这是愚蠢的事情。只需从Release
构建变体切换到Debug
即可解决问题。
答案 10 :(得分:0)
在我的情况下,a使用了错误的测试依赖项。我的build.gradle中有以下内容
testImplementation 'io.kotlintest.kotlintest-runner-junit5:3.4.2'
如您所见,这是针对JUnit5的。我将其更改为以下
testImplementation 'io.kotlintest.kotlintest-runner-junit4:3.4.2'
然后出现,错误。
答案 11 :(得分:0)
我的情况是什么。
仅供参考,我们有两种类型的单元测试
我在本地单元测试中错误地创建了Instrumentation测试,然后我直接将该测试从本地单元复制到了Instrumentation测试中。它开始说“未找到测试”。。
解决方案:刚刚为Instrumentation测试创建了一个新的测试类。
始终尝试在特定的测试文件夹中创建一个新的测试类,并开始在其中编写测试。
答案 12 :(得分:0)
转到:
文件=>使高速缓存无效/重新启动... =>使无效并重新启动
这帮了我大忙。
答案 13 :(得分:0)
仅通过擦除模拟器中的数据即可为我解决问题。在日志中,我可以看到空间不足。 对我而言,这不是任何配置问题,因为在运行测试之前运行的测试让我出现了空套件错误,并且工作正常,并且两个测试都位于项目中的同一位置。
答案 14 :(得分:0)
@Test注释应从Content-Type
注释
答案 15 :(得分:0)
在我的情况下,使用KOTLIN ,它没有扔东西。 如果我在终端中运行它试图执行的命令:
$ adb shell am instrument -w -r -e debug false -e class xx.xxxxxxx.xx.xx.xxx.xxx.HomeActivityTests xx.xxxxxxx.xx.xx.debug.test / android.support.test。 runner.AndroidJUnitRunner
会抛出错误:
引起:org.mockito.exceptions.base.MockitoException:
无法模拟/间谍类xx.xxxxxxx.xx.xx.xxx.xxx.xxx.ProductUseCase
Mockito不能嘲笑/间谍,因为: - 最后一堂课 在xx.xxxxxxx.xx.xx.rules.useCases.ProductUseCaseRule。(ProductUseCaseRule.kt:36) 在xx.xxxxxxx.xx.xx.xxx.xxx.HomeActivityTests。(HomeActivityTests.kt:25) ......还有20个
FAILURES !!!
这告诉我,我没有open
我的班级,因为在使用Kotlin进行测试时必须
答案 16 :(得分:0)
如果我解决了该问题,将进行更新,但使用以下项目来构建我的项目
debugImplementation 'androidx.fragment:fragment-testing:$fragment_version'
所有我的测试结果都报告了
未找到测试
,包括未导入软件包的所有测试。同时,将其从gradle中删除,然后调用“ Clean Project”,然后调用“ Invalidate Caches / Restart”,即可解决此问题。
编辑:
您的gradle还必须包括
debugImplementation "androidx.test:core:$core_version"
答案 17 :(得分:0)
还有另一件事可以检查我在旧分支上时是否愚蠢地错过了:
确保要尝试运行的测试没有@Ignore批注:)
答案 18 :(得分:-4)
这是一个非常简单的问题,只需按 Alt + Shift + F10 并以这种方式运行:) PS:如果不起作用,请尝试 Shift + F10 。