Android Studio“没有找到测试”

时间:2014-03-22 18:53:33

标签: android macos testing gradle android-studio

有没有人能够在Android Studio中运行测试(从GUI而不是终端),我无法从GUI运行测试。

每次我尝试通过GUI运行测试时,我都会收到以下消息:

enter image description here

我可以使用以下命令从终端运行测试:

./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"
    }
}
…

如果有人有任何建议,我会非常高兴在这里。

19 个答案:

答案 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)

正如hereazizbekian中由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)

我的情况是什么。

仅供参考,我们有两种类型的单元测试

  1. 本地单元测试(android studio项目的test / java文件夹)
  2. 仪器单元测试(android studio项目的androidTest / java文件夹)

我在本地单元测试中错误地创建了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