junit:没有发现任何测试

时间:2014-03-18 02:50:23

标签: java junit intellij-idea

我继承了一个Java项目,并且是Java开发的新手。我觉得让代码感觉舒服的好方法就是围绕它编写一些测试。我正在使用IntelliJ编写代码。

我现有的项目有一个像这样的文件夹结构:

/myProject
  /src
    /main
      /java
        /com.lexcorp
          /core
            /email
              /providers
                emailProvider.java

我创建了一个新项目,该项目将为该项目进行测试。我希望这个项目能够同时进行单元测试和集成测试。目前,我的新项目有这样的结构:

/myProjectTests
  /src
    /main
      /java
        /com.lexcorp.core.email.providers
          emailProviderTest.java

emailProviderTest.java文件如下所示:

package com.lexcorp.core.email.providers;

import junit.framework.TestCase;
import org.junit.Test;

public class EmailProviderTest extends TestCase {

    private final String username = "[testAccount]";

    private final String password = "[testPassword]";

    @Test
    public void thisAlwaysPasses() {
        assertTrue(true);
    }
}

此项目具有运行/调试配置,其中包含以下属性:

  • 测试种类:全部包装
  • 搜索测试:整个项目

当我运行此配置时,出现错误消息:

junit.framework.AssertionFailedError: No tests found in com.lexcorp.core.email.providers.EmailProviderTest
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
    at org.junit.runners.Suite.runChild(Suite.java:127)
    at org.junit.runners.Suite.runChild(Suite.java:26)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:202)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

我不明白为什么我会收到一个归结为“未找到测试”的错误。虽然我的项目结构不同,但操作系统上的文件夹结构匹配(这是让我感到困惑的另一件事)。为什么我会收到此错误,如何解决?非常感谢你!

11 个答案:

答案 0 :(得分:118)

我也遇到了错误

  

junit.framework.AssertionFailedError:在...中找不到测试

但我忘了指定

defaultConfig {
    ...
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

同步项目后,它找到了测试。所以也许它可以帮助别人

答案 1 :(得分:32)

扩展junit.framework.TestCase是实现测试用例的旧JUnit 3方法,因为没有方法以字母 test 开头,所以不起作用。由于您使用的是JUnit 4,因此只需将该类声明为

即可
public class EmailProviderTest {

并且可以从@Test注释中找到测试方法。

阅读:JUnit confusion: use 'extend Testcase' or '@Test'?

答案 2 :(得分:12)

我也是这样:

  

junit.framework.AssertionFailedError:在...中找不到测试

通过从 method1

重命名测试方法来解决
@Test
public void method1(){
    // Do some stuff...
}

testMethod1

@Test
public void testMethod1(){
    // Do some stuff...
}

答案 3 :(得分:6)

如果您使用的是jUnit 4,则不要使用 extends TestCase ,删除此修复错误。

答案 4 :(得分:1)

在创建JUnit 5方法时,我碰到了private中的情况:

import org.junit.jupiter.api.Test

class Test1 {

    @Test
    private fun sort() {
        println("1")
    }
}

删除private

答案 5 :(得分:0)

我在使用数据提供程序时使用了它,其中一个参数有一个换行符,如下所示:

@DataProvider
public static Object[][] invalidAdjustment() {
    return new Object[][]{
            {"some \n text", false},
            };
}

删除\n解决了问题

答案 6 :(得分:0)

在Intellij IDEA中,对于Java框架,我遇到了同样的问题。 我没事:

  • 从TestCase继承的类
  • 我已经导入了junit.framework.TestCase
  • 我已经添加了装饰@Test

但是我做错了一件事情:方法的名称不是以“ test”开头的,实际上是:

@Test
public void getSomethingTest(){

当我将其更改为:

@Test
public void testGetSomethingTest(){

我解决了:执行者终于能够将这种方法识别为测试方法。 我什么都没改变。

答案 7 :(得分:0)

就我而言,我需要在任务 junit 的类路径中使用junit4-version.jar,并且:

ant-version.jar
ant-junit-version.jar
ant-junit4-version.jar

在我的蚂蚁安装库(/usr/share/ant/lib)中。

当我没有在正确的位置放置ant-junit4-*version*.jar时,出现了错误“ junit.framework.AssertionFailedError:在...中未找到测试”。

我通过安装 ant-optional debian / ubuntu软件包来纠正此问题:

apt-get install ant-optional

答案 8 :(得分:0)

我为此感到烦恼,直到我将测试源文件从此文件夹中移走,所有答案都没有帮助我。

testDate<-as.Date(c("2014-12-31","2015-01-03","2015-01-04"))
testFrame2<-data.frame(A=c(1,2,3), B=c(1,3,5))
testXTS2<-as.xts(testFrame2, order.by=testDate)
plot.xts(testXTS2$A)
#Plots everything as intended, no error message

到此文件夹:

testXTS1$A+testXTS1$B
#Error in `+.default`(testXTS1$A, testXTS1$B) : non-numeric argument to binary operator

testXTS2$A+testXTS2$B
#works fine again

答案 9 :(得分:-1)

另一个原因通常我看到人们有方法参数,删除测试方法中可能包含的任何参数,无论你添加@Test注释,你需要让你的方法名称开始“测试”,以便Junit选择你测试用例。 希望它有所帮助。

答案 10 :(得分:-1)

测试方法名称public void test 名称(){}

源命名名称方法中的 name()