我的Java测试在Eclipse中运行良好。但现在,当我从运行菜单重新启动测试时,我收到以下消息:
No tests found with test runner 'JUnit 4'
在.classpath
文件中,我有所有jar
个文件,最后有:
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="output" path="bin"/>
</classpath>
如何解决此错误并让测试再次运行?
答案 0 :(得分:146)
这恰好发生在我身上。重建或重启Eclipse没有帮助。
我通过重命名其中一个测试方法来解决它,以“test ...”(JUnit3样式)开头,然后找到所有测试。我将它重新命名为以前的版本,它仍然有效。
答案 1 :(得分:41)
当我们得到这些错误时,似乎Eclipse只是混淆了。重启Eclipse,刷新项目,清理它,让Eclipse重建它,然后再试一次。大部分时间都像魅力一样。
答案 2 :(得分:34)
在'test'目录的上下文菜单中选择'Build path' - &gt; '用作源文件夹'。 Eclipse应该将您的unitTests.java文件视为源文件。 警告'未找到JUnit测试',因为'build'目录中没有unitTests.class文件
答案 3 :(得分:28)
检查您的测试类是否扩展了“TestCase”。如果是这样,删除该条款。您的类不需要从“TestCase”类扩展。这是我见过的大多数情况。
public class MyTestCase extends TestCase{
@Test
public void checkSomething() {
//...
}
}
//Result> AssertionFailedError: No test Found in MyTestCase
以下TestCase应该没问题。
public class MyTestCase {
@Test
public void checkSomething() {
//...
}
}
//Works fine
答案 4 :(得分:27)
我遇到了同样的问题,我把它调试到了网络和junit内部的坏例子。基本上不要让你的类扩展TestCase,如Junit 4.x中的一些示例所示。使用一些命名约定 Test ,或者如果你想要一个注释,你可以使用@RunWith(JUnit4.class)。
如果需要访问assert方法,请扩展Assert或使用静态导入。
如果你的类扩展了TestCase,那么即使你使用Junit 4 Runner,它也将运行为3.这是因为在初始化代码中有检测:
请参阅JUnit3Builder和行:
boolean isPre4Test(Class<?> testClass) {
return junit.framework.TestCase.class.isAssignableFrom(testClass);
}
返回true,不会尝试测试junit4兼容性。
答案 5 :(得分:5)
尝试添加
@Test上面的测试方法就像这样
@Test
public void testParse()
{
}
答案 6 :(得分:4)
另一种可能的解决方案我将投入到响铃中:我无法从编辑器窗口运行测试类,也无法在Package Explorer中运行测试类,而是右键单击类中的类名。大纲视图并选择Run As JUnit Test确实有效......去图!
答案 7 :(得分:4)
我找到了答案:
当我从eclipse执行独立测试时出现此错误(右键单击该方法并选择以junit测试运行),
当我执行完整的类作为junit测试时,测试使用参数正确执行。
答案 8 :(得分:4)
JUnit4中没有测试。请改为使用注释或使用旧的JUnit3名称约定。
示例:
@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})
答案 9 :(得分:4)
这也发生在我身上。我尝试重新启动Eclipse并使用测试为我的测试方法添加前缀。两者都没有。
以下步骤有效: 将@BeforeClass和@AfterClass中存在的所有测试方法更改为静态方法。
即。如果你有以下格式的测试方法:
@BeforeClass
public void testBeforeClass(){
}
然后将其更改为:
@BeforeClass
public static void testBeforeClass(){
}
这对我有用。
答案 10 :(得分:3)
我的问题是声明import org.junit.Test;
已经消失(或者没有添加?)。添加之后,我不得不删除另一个import
声明(Eclipse会暗示你提到哪一个),一切都开始重复了。
答案 11 :(得分:3)
很晚但是解决了我的问题的是我的测试方法名称都以字母开头:“public void Test”。使小写字母工作。
答案 12 :(得分:3)
当我遇到这个问题时,我只需编辑文件并保存它......就像魅力一样
答案 13 :(得分:2)
我尝试了Germán的解决方案。 它适用于我班级的所有方法,但我的项目中有很多课程。
所以我尝试从构建路径中删除然后重新添加它。 它运作得很好。
希望它有所帮助。
答案 14 :(得分:1)
关闭并打开为我工作的项目。
答案 15 :(得分:1)
检查测试所在的文件夹是否为源文件夹。如果没有 - 右键单击并用作源文件夹。
答案 16 :(得分:1)
可能是您的JUnit启动配置是针对单个测试类的,并且您以某种方式将该配置更改为“在源文件夹,包或项目中运行所有测试”
但是这可能会触发“没有测试运行'JUnit 4'的测试错误信息。”
或者您在测试类中进行了修改,删除了@Test
注释
请参阅此wiki page。
答案 17 :(得分:1)
六年后...... Eclipse仍存在问题,偶尔也找不到JUnits。
在我的Eclipse Mars 2中,我发现如果文件中有超过9或10个@Test
注释,它将无法识别从git中引入的测试类。我需要注释掉任何额外的测试,运行测试类,然后取消注释它们并重新运行该类。去图......
答案 18 :(得分:1)
我的案例与@ JamesG的答案相似:我重新启动了Eclipse,重建了项目并刷新了它;但在我做了之前,我首先关闭了项目(右键单击包浏览器中的项目 - &gt;关闭项目),然后重新打开它。然后它奏效了。
在找到我刚刚描述的最终解决方案之前找到的解决方案解决方案:复制测试类,并将测试类作为JUnit运行。
答案 19 :(得分:1)
我在运行JUnit测试时也面临同样的问题。我通过将注释@Test放在主测试函数的上方来解决这个问题。
答案 20 :(得分:0)
我必须在命令行上执行mvn clean然后在eclipse中执行project-&gt; clean。我事先将这个课程重新命名,然后重新命名,但我怀疑是否有帮助。
答案 21 :(得分:0)
我遇到这个问题是因为我有一个非静态的 @BeforeClass。
由于某种原因,我的正常 junit 运行配置没有暴露该错误。
答案 22 :(得分:0)
如果您确定它曾经可以工作,但现在不再工作,则 Java 索引可能已损坏。在首选项中,搜索“java index”;它在“Java”中,然后有一个按钮“重建索引”(或使用 Ctrl+3,“查找操作”,快速搜索“重建 Java 索引”)。选择后,下次尝试运行 JUnit 测试时,您应该会看到 Eclipse 正在重建 Java 索引,现在应该开始 JUnit 测试。
答案 23 :(得分:0)
检查更新!考虑到已经提出了许多解决方法,Eclipse无疑完全意识到了这个问题。显然有一些系统性的东西……有些东西不符合解释或任何一致性的感觉。如果Eclipse让社区知道问题所在和解决方法,那将很有用。
对我来说,最近的另一个发现是删除没有文件或排除所有文件的任何源目录。
答案 24 :(得分:0)
您可以通过将测试类重命名为以Test结尾的名称来解决此问题,例如ThisAndThatTest
答案 25 :(得分:0)
在我的情况下,问题是泛型参数:
public class TestClass<T extends Serializable> {
正在移除:
并且该选项再次可用。
我正在使用Junit4
答案 26 :(得分:0)
在测试顶部添加@Test
。
将鼠标悬停在注释上。
选择“将junit 4库添加到类路径”
答案 27 :(得分:0)
当我的Java类名与Test类名相似时,我遇到了这个问题。刚刚通过用“ Test”关键字进行修正来更新Test类的名称,然后它开始工作
之前: Java类:ACMEController 测试类:ACMEController
之后: Java类:ACMEController 测试类:ACMEControllerTest
答案 28 :(得分:0)
我最近遇到了这个问题,在最新的Eclipse中似乎已解决。
eclipse-java 4.11.0,2019-03:R -> 4.12.0,2019-06:R
答案 29 :(得分:0)
我的问题是使用**
testng
**包 org.testng.Assert;
您可以使用JUnit将其替换在项目( Maven )的库中,然后需要重构项目。
或添加TestNG Eclipse插件
答案 30 :(得分:0)
您的Eclipse项目是否基于maven?如果是这样,您可能需要更新m2eclipse版本。
快速说明:我有一个项目 Eclipse是基于maven的,和 最初使用“new。”生成 maven项目“Eclipse中的向导。我是 使用JUnit 4.5进行单元测试, 并且可以很愉快地进行测试 从命令行使用maven,和 Eclipse使用的单独测试 作为JUnit测试运行....但是,当我 试图运行所有的测试 通过调用run作为JUnit进行项目 test ...在项目根节点上, Eclipse抱怨说“没有发现任何测试 与测试跑步者junit 4 “。解决了 将m2eclipse升级到最新版本 稳定的发展建设 m2eclipse更新站点(具体来说,我 从版本升级 0.9.8.200905041414到Eclipse Galileo中的0.9.9.200907201116版本。
从这里开始:http://nuin.blogspot.com/2009/07/m2eclipse-and-junit4-no-tests-found.html
答案 31 :(得分:0)
您可以通过执行以下操作来解决此问题:
<classpathentry kind="src"
path="src/test/java"/>
。您可以用测试包替换“src / test / java” 发生此问题是因为junit无法识别您的源代码:D
答案 32 :(得分:0)
右键单击项目 - &gt;构建依赖关系 - &gt;删除已从构建路径中排除的那些 - &gt;单击“确定”
右键单击项目 - &gt; Maven - &gt;更新项目。
你应该好好去......
答案 33 :(得分:0)
还有一次机会,您可能已将Junit Test从较低版本(例如Junit 3)更改为Junit 4。 遵循以下步骤: -
1. Right Click on class
2. Select Run as >> "Run Configurations"
3. Check your "Test Runner" option in new window
4. If it not same as maven change it for example change it as Junit 4.
答案 34 :(得分:0)
我开始在我的工作中使用Selenium和Eclipse,我正在进行第一次自动化测试,并从代码@Before,@ Test和@After注释中删除,我遇到了这个问题&#34;没有测试找到了测试运行者junit4&#34;。
我的解决方案只是再次添加@ Before,@ Test和@After笔记,并且我的脚本工作正常。重要的是不要从代码中删除它。
这是一个使用Google搜索内容的简单测试:
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class TestingClass {
private WebDriver driver;
//Creates an instance of the FirefoxDriver
**@Before**
public void SetUp() throws Exception {
driver = new FirefoxDriver();
}
**@Test**
//Search using keyword through Google Search
public void TestTestClass2 () throws Exception {
driver.get("http://www.google.com.mx/");
driver.findElement(By.name("q")).sendKeys("selenium");
Thread.sleep(10000);
driver.findElement(By.name("btnG")).click();
Thread.sleep(10000);
}
//Kill all the WebDriver instances
**@After**
public void TearDown() throws Exception {
driver.quit();
}
}
答案 35 :(得分:0)
答案 36 :(得分:0)
我经常遇到这个问题。解决这个问题的最重要的事情是从运行配置中运行JUnit测试...确保将JUnit 4设置为测试运行器。
通常,我在Package Explorer的上下文菜单中尝试Run As ... Junit测试时会看到此问题。如果右键单击要运行的测试代码,而不是选择Run As ... Junit Test,则选择Run configurations ...确保Project,Test Class和test runner设置正确,单击apply,然后运行我一直都在工作。
答案 37 :(得分:0)
我发现如果你的测试类从TestCase
扩展,那么Eclipse似乎只执行JUnit 3样式测试。如果删除继承,注释对我有用。
请注意,您需要静态导入所有必需的assert*
方法,例如import static org.junit.Assert.*
。
答案 38 :(得分:0)
我也在使用Maven运行Eclipse(m2e 1.4)。测试是使用Maven运行的,但不是使用Eclipse ...即使在几次应用Maven>Update project
之后。
我的解决方案是在m2e生成的.classpath中添加一些行。这些线条现在已经存在。
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
答案 39 :(得分:-1)
这种例外有两个原因:
由于理由一,它没有站立的腿。因为很多人都说:“老”的方法很完美。只有新添加的方法无法识别。 然后第二个原因成为唯一的解释:JUnit找不到新编译的类。 考虑到这一点,我做到了这一点:右键单击项目 - &gt; Java Build Path - &gt;编辑源项目: project_name / src / test / java的Output文件夹,将Output文件夹更改为'特定输出文件夹(相对于project_name的路径)。提供此值:target / test-class。 保持:这是Maven定义的默认测试源代码输出文件夹。它已被M2E(或我)覆盖。这就是为什么JUnit找不到它。 所以我的猜测是,许多遇到这个可爱异常的人最有可能处理由Maven管理的Web项目。我对吗?!这也促成了我的结论,即应该排除一个原因 - 可以找到“旧”方法是因为它们是在(重新)启动时自动编译的。也许进入“错误”的道路,但无论如何JUnit都找到了它。
在我弄明白之前。我按照建议尝试了很多东西:更新到最新的JUnit4,在构建路径之间来回和用作源文件夹,资本测试与测试等。在我专门确定测试源的输出位置之前没有发生任何事情。 有了所有这些解释,我的第二个理由应该重新措辞如下:新的代码没有及时汇编到正确的道路上! 祝你好运。
答案 40 :(得分:-1)
我在实现@RunWith(Cucumber.class)时也遇到了这个问题。 因为这个注释是在Public类中,因此 Eclipse显示了这一点&#34;没有找到测试运行器的测试&#34;错误。
一旦我在跑步者课程之前调用/放置了测试跑步者注释,测试就很好了。
读者必须确定他们正在使用的Junit Test Runner。可以检查@RunWith(JUnit4.class)是否在runner.class括号{}之外或之内。如果它在里面,请把它放在外面。
答案 41 :(得分:-1)
如果您尝试设置 junit 5
添加@RunWith(JUnitPlatform.class)
和import org.junit.platform.runner.JUnitPlatform;
以便eclipse可以将junit 5
测试类识别为测试类