Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUNIT测试-EclipseIDE引发错误_Java_Junit - Fatal编程技术网

Java JUNIT测试-EclipseIDE引发错误

Java JUNIT测试-EclipseIDE引发错误,java,junit,Java,Junit,我有下面的类和方法,我试图让JUNIT测试工作,但它抛出了一个错误。这是上课时间 package christmas; public class Worksheet1q1 { public static void main(String[] args) { int m = 3, n = 4; int result = power(m, n); System.out.printf( "power method "); S

我有下面的类和方法,我试图让JUNIT测试工作,但它抛出了一个错误。这是上课时间

package christmas;

public class Worksheet1q1 {

    public static void main(String[] args) {
        int m = 3, n = 4;
        int result = power(m, n);
        System.out.printf( "power method  ");
        System.out.printf( "%d^%d = %d", m, n, result);


    } 

    //* code for  power

static int power(int m, int n) {



    if (n != 0)



        return (m * power(m, n - 1));
    else


 }}
这是我的JUNIT测试类和方法

  package christmas;


  import static org.junit.Assert.assertThat;

  import org.junit.Test;



  public class Worksheet1q1Test {

    @Test


    public void twoAndThreeissix(int m, int n) throws Exception {




    int result = Worksheet1.power(2, 3);

    assertThat(result, is(8L));

    }}
我有两个问题。首先,当我运行测试类时,我有一个错误,方法“christmas找不到”,但christmas是我的包名,所以不确定Eclipse为什么认为它是一个方法

另外,我在assertThat上得到了一个错误-该错误表明找不到方法“is”

这是我第一次尝试JUNIT测试,因此我们将非常感谢您的帮助。

您的代码不好

这在IntelliJ中运行良好:

package christmas;

public class Worksheet1q1 {

    public static final int DEFAULT_BASE = 3;
    public static final int DEFAULT_EXPONENT = 4;

    public static void main(String[] args) {
        int m = (args.length > 0 ? Integer.parseInt(args[0]) : DEFAULT_BASE);
        int n = (args.length > 1 ? Integer.parseInt(args[1]) : DEFAULT_EXPONENT);
        int result = power(m, n);
        System.out.printf("%d^%d = %d", m, n, result);
    }

    static int power(int m, int n) {
        if (n < 0) throw new IllegalArgumentException("negative powers are not allowed");
        if (n == 0) {
            return 1;
        } else {
            return (m * power(m, n - 1));
        }
    }
}

我运行了你的代码,并在错误出现时修复了它们。我在命令行上运行了它。我已将所有导致错误的内容放入注释中:

package christmas;

public class Worksheet1q1 {

    public static void main(String[] args) {
        int m = 3, n = 4;
        int result = power(m, n);
        System.out.printf( "power method  ");
        System.out.printf( "%d^%d = %d", m, n, result);
    } 

    //* code for  power
    static int power(int m, int n) {
      if (n != 0)
        return (m * power(m, n - 1));
      else return 1;    // added due to below error
    }                   // compile error, illegal start of statement.
}
对于测试,我添加了一个不会失败的测试,使用的是
int
,而不是
long

package christmas;

import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.hamcrest.CoreMatchers.is; //  error: cannot find symbol

// compiler: warning: [deprecation] <T>assertThat(T,Matcher<? super T>) in Assert has been deprecated
// import static org.junit.Assert.assertThat;
import static org.hamcrest.MatcherAssert.assertThat;

public class Worksheet1q1Test {

    @Test
    // FAILURES!!!  Method twoAndThreeIsEightLong should have no parameters
//    public void twoAndThreeIsEightLong(int m, int n) throws Exception {
    public void twoAndThreeIsEightLong() throws Exception {
//      int result = Worksheet1.power(2, 3); // error: cannot find symbol
      int result = Worksheet1q1.power(2, 3);
      assertThat(result, is(8L));  // result is an int - will fail!
    }

    @Test
    public void twoAndThreeIsEightInt() throws Exception {
      int result = Worksheet1q1.power(2, 3);
      assertThat(result, is(8));
    }

    @Test
    public void twoAndThreeIsEight() throws Exception {
      int result = Worksheet1q1.power(2, 3);
      assertEquals(result, 8);
    }
}
运行:

java -cp C:\..snip..\lib\junit-4.13.jar;C:\..snip..\lib\hamcrest-core-1.3.jar;target org.junit.runner.JUnitCore christmas.Worksheet1q1Test 
结果:

JUnit version 4.13
...E
Time: 0.042
There was 1 failure:
1) twoAndThreeIsEightLong(christmas.Worksheet1q1Test)
java.lang.AssertionError:
Expected: is <8L>
     but: was <8>
        at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
        at org.junit.Assert.assertThat(Assert.java:964)
        at org.junit.Assert.assertThat(Assert.java:930)
        at christmas.Worksheet1q1Test.twoAndThreeIsEightLong(Worksheet1q1Test.java:18)

FAILURES!!!
Tests run: 3,  Failures: 1
JUnit 4.13版 E 时间:0.042 有1次失败: 1) 2和18小时(圣诞节。工作表1Q1测试) java.lang.AssertionError: 预期:是吗 但是:是吗 位于org.hamcrest.matcherasert.assertThat(matcherasert.java:20) 位于org.junit.Assert.assertThat(Assert.java:964) 位于org.junit.Assert.assertThat(Assert.java:930) 圣诞节。工作表1q1test.two和reesightlong(工作表1q1test.java:18) 失败!!! 测试运行:3次,失败:1次
结果是一个int,您正在与long进行比较。错误表明无法找到方法“is”,您从未导入
is
。您缺少导入静态org.hamcrest.CoreMatchers.is另外,我只想assertEquals(result,8)谢谢-非常有用,但我仍然无法理解为什么eclipse认为我的软件包Christmas是一个有用的方法?这是正确的答案。你是汤姆·索耶尔吗?这是家庭作业吗?这不是家庭作业-这是我,一个有经验的IT专业人士,试图学习新技能。现在我有了一个可行的方法,我可以利用它,并将它应用到其他项目中……我无法想象为什么这会被否决。原代码不正确;此代码更正了它。空荡荡的else显然是错的。单元测试也是一种改进。为什么要投否决票?我同意这是非常有帮助的——我不知道为什么会被降级。我是一名Cisco工程师,正在努力学习编码。这些年来,我忘记了从基础知识开始构建代码是多么困难。大多数网站和视频似乎从来没有在正确的地方开始,你需要有人来帮助你正在努力工作的事情。而线程上的人帮助我做到了这一点。我现在已经写了六个我自己的Junit测试-我在飞-谢谢你。干得好。如果你能掌握Cisco和网络,你可以学习OOP、Java和TDD。如果您需要更多,请发回。谢谢您-非常感谢您和其他人的帮助,@Sharp我添加了一个使用
assertEquals的测试(结果,8)也是。它还需要额外的导入。
java -cp C:\..snip..\lib\junit-4.13.jar;C:\..snip..\lib\hamcrest-core-1.3.jar;target org.junit.runner.JUnitCore christmas.Worksheet1q1Test 
JUnit version 4.13
...E
Time: 0.042
There was 1 failure:
1) twoAndThreeIsEightLong(christmas.Worksheet1q1Test)
java.lang.AssertionError:
Expected: is <8L>
     but: was <8>
        at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
        at org.junit.Assert.assertThat(Assert.java:964)
        at org.junit.Assert.assertThat(Assert.java:930)
        at christmas.Worksheet1q1Test.twoAndThreeIsEightLong(Worksheet1q1Test.java:18)

FAILURES!!!
Tests run: 3,  Failures: 1