Java JUNIT测试-EclipseIDE引发错误
我有下面的类和方法,我试图让JUNIT测试工作,但它抛出了一个错误。这是上课时间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
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