为什么我不能从Package Explorer运行所有Java JUnit测试? - Scala插件问题

时间:2015-08-01 20:09:52

标签: java eclipse scala junit

编辑3

我安装了新版本的eclipse(Mars - 4.5.0),一切正常。但是,当我通过Eclipse Marketplace重新安装Scala时,问题再次出现。那么也许它与scala插件有关吗?

编辑2

我正在玩它更多,并发现如果我删除某些包,功能返回。具体来说,如果我删除包functional and io,则能够运行整个项目的测试返回。重命名包没有帮助,只删除它们。此外,如果我在这些包中添加JUnit测试,我仍然无法通过运行整个包来通过包浏览器运行该测试。

我在Eclipse中遇到特定Java项目的问题。当我尝试从项目资源管理器(通过[right click on project folder] --> run as --> JUnit Test)运行所有JUnit测试时,我收到许多人似乎看到的错误消息:

  

问题启动JUnit测试:   没有测试跑步者发现的测试' JUnit 4'

单击消息上的“确定”将显示“运行配置”对话框。

奇怪的是,在整个项目范围内,该项目似乎非常孤立。我可以毫无困难地做到以下几点:

  • 通过打开并点击顶部的绿色运行按钮,在此项目中运行任何单个测试。
  • 通过右键单击项目资源管理器中的类并选择run as JUnit Test
  • ,在此项目中运行任何单个测试
  • 使用相同的方法在此项目的任何包中运行所有测试。
  • 使用相同的方法在任何其他项目中运行所有测试。

我已尝试过类似帖子中提到的标准内容,似乎没什么用。具体来说,我试过了:

  • 重启eclipse
  • 重新启动计算机
  • 清理和重建项目
  • 删除项目并从git重新克隆,然后重新添加到eclipse
  • 将@RunWith注释添加到我的测试用例
  • 确保我的所有测试用例都以" test"
  • 开头
  • 使用JUnit3代替
  • 删除所有JUnit运行配置并重新创建此运行配置

此外,我清楚地记得这个功能在不久前为这个项目工作,但不记得确切的时间。所以我必须添加/更改/删除导致错误出现的内容。

编辑@ Durron597的建议: 遗憾的是,这些建议都没有奏效。我还尝试删除每个JUnit运行配置并再次尝试创建配置过程,但仍然没有运气。

我的eclipse版本是:Luna Service Release 2(4.4.2)

我的JUnit版本是:4.11

JUnit首选项截图: JUnit preferences screenshot

这里是一个测试的代码:

package common;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.HashSet;

import org.junit.Test;

public class UtilTest {

    @Test
    public void testWrappers(){
        short[] s = {1,2,3,4};
        Short[] s2 = Util.boxArr(s);
        short[] s3 = Util.unboxArr(s2);

        assertEquals(s.length, s2.length);
        assertEquals(s.length, s3.length);
        for(int i = 0; i < s.length; i++){
            assertEquals(s[i], s2[i].shortValue());
            assertEquals(s[i], s3[i]);
        }

        int[] i = {1,2,3,4, Integer.MAX_VALUE, Integer.MIN_VALUE};
        Integer[] i2 = Util.boxArr(i);
        int[] i3 = Util.unboxArr(i2);

        assertEquals(i.length, i2.length);
        assertEquals(i.length, i3.length);
        for(int x = 0; x < s.length; x++){
            assertEquals(i[x], i2[x].intValue());
            assertEquals(i[x], i3[x]);
        }

        long[] l = {1,2,3,4, Integer.MAX_VALUE, Integer.MIN_VALUE, Long.MAX_VALUE, Long.MIN_VALUE};
        Long[] l2 = Util.boxArr(l);
        long[] l3 = Util.unboxArr(l2);

        assertEquals(l.length, l2.length);
        assertEquals(l.length, l3.length);
        for(int x = 0; x < s.length; x++){
            assertEquals(l[x], l2[x].longValue());
            assertEquals(l[x], l3[x]);
        }

        float[] f = {1,2,3,4, 0.4f, 0.1f, Float.MAX_VALUE, Float.MIN_NORMAL};
        Float[] f2 = Util.boxArr(f);
        float[] f3 = Util.unboxArr(f2);

        assertEquals(f.length, f2.length);
        assertEquals(f.length, f3.length);
        for(int x = 0; x < s.length; x++){
            assertEquals(f[x], f2[x].floatValue(), 0.00001);
            assertEquals(f[x], f3[x], 0.00001);
        }


        double[] d = {1,2,3,4, 0.4, 0.1, Float.MAX_VALUE, Float.MIN_VALUE, Double.MAX_VALUE, Double.MIN_NORMAL};
        Double[] d2 = Util.boxArr(d);
        double[] d3 = Util.unboxArr(d2);

        assertEquals(d.length, d2.length);
        assertEquals(d.length, d3.length);
        for(int x = 0; x < s.length; x++){
            assertEquals(d[x], d2[x].doubleValue(), 0.00001);
            assertEquals(d[x], d3[x], 0.00001);
        }

        char[] c = {1,2,3,4, 'a', 'b', '.', Character.MAX_VALUE, Character.MIN_VALUE};
        Character[] c2 = Util.boxArr(c);
        char[] c3 = Util.unboxArr(c2);

        assertEquals(c.length, c2.length);
        assertEquals(c.length, c3.length);
        for(int x = 0; x < s.length; x++){
            assertEquals(c[x], c2[x].charValue());
            assertEquals(c[x], c3[x]);
        }
    }

    @Test
    public void testRandElement(){
        assertTrue(null==Util.randomElement(null));

        HashSet<Integer> s = new HashSet<>();
        assertTrue(null==Util.randomElement(s));

        for(int i = 0; i < 10; i++){
            s.add(i);
        }

        HashSet<Integer> s2 = new HashSet<>();
        while(! s2.equals(s)){
            Integer i = Util.randomElement(s);
            s2.add(i);
            assertTrue(s.contains(i));
        }
    }

    @Test
    public void testPermute(){
        ArrayList<Integer[]> a = Util.permute(new Integer[]{1,2,3,4});
        assertEquals(a.size(), 24);

        for(Integer[] i : a){
            assertEquals(i.length, 4);
            assertEquals(10, i[0] + i[1] + i[2] + i[3]);
        }

        HashSet<Integer[]> s = new HashSet<>(a);
        assertEquals(s.size(), 24);

        a = Util.permute(new Integer[]{});
        assertEquals(a.size(), 1);
    }

}

如果这也有帮助,整个项目都在https://github.com/Mshnik/UsefulThings

3 个答案:

答案 0 :(得分:3)

尝试查看此主题中的建议。这不是完全相同的错误,但它类似:No tests found with test runner 'JUnit 4'

我假设问题是“运行所有测试”没有正确的运行配置。如果您最近清理了旧的和过时的运行配置,并且在没有意识到的情况下删除了相应的运行配置,那么这可能会破坏。让我们按照以下步骤创建一个:

  1. 转到“运行配置”对话框。
  2. 选择左侧的JUnit
  3. 点击带有星标的页面,工具提示文字为“新启动配置”
  4. 给它起个名字。 (我使用AllTests
  5. 点击Run all tests in the selected project, package or source folder:单选按钮
  6. 使用搜索对话框指向您的项目
  7. 确保Test runner设置为JUnit 4
  8. 单击“应用”,然后单击“运行”这应该恢复破碎的方法。

    如果这些步骤不起作用,请尝试以下操作(按顺序尝试每个步骤,如果没有修复它,请转到下一步) - 这个想法可能是您确实有配置,但它已损坏。

    1. 确保您使用该页面底部的Eclipse JUnit启动器
    2. 选中所有其他选中“运行所有测试”单选按钮的运行配置并删除它们。
    3. 重启Eclipse
      • 最后这样做因为我怀疑它会做什么除非你已经完成了先前的步骤,正如你在问题中提到的那样
    4. 现在应该修复。如果不是,请edit您的问题,以包括您的JUnit版本和您的Eclipse版本。

答案 1 :(得分:1)

我更新到最新版本的eclipse(Mars - 4.5.0),问题完全消失了。所以也许它是eclipse等版本的错误。我没有真正回答为什么我有这个问题。

答案 2 :(得分:0)

如果您查看“问题”选项卡,您可能会看到一条条目,指出&#34; scala测试未构建,因为依赖范围主要错误&#34;或类似的东西。这表明测试的类路径中的某些构建问题阻止了测试的构建,即使您的测试不依赖于损坏的部分本身。似乎Scala编译器有点挑剔。

在任何情况下,修复构建问题和程序包的其他部分,您的测试可能会起作用。对我来说,我有一个类似的问题,ScalaIDE提供的Scala Library容器不包含Jackson Module Scala,我不得不手动添加该库。一旦我这样做,这就修复了构建并允许我再次运行测试。