Java 一个方法在JUnit中生成了预期的结果,但它说它为null
我从单元测试开始。我有一个方法,它给了我预期的结果,但是JUnit说它正在生成空值。基本上,我的方法是生成偶数。我的代码如下: 我的班级:Java 一个方法在JUnit中生成了预期的结果,但它说它为null,java,unit-testing,intellij-idea,groovy,junit,Java,Unit Testing,Intellij Idea,Groovy,Junit,我从单元测试开始。我有一个方法,它给了我预期的结果,但是JUnit说它正在生成空值。基本上,我的方法是生成偶数。我的代码如下: 我的班级: import java.util.ArrayList; public class BasicCommandsReview { private ArrayList<Integer> listaDeNumeros = new ArrayList<>(); private ArrayList<Integer>
import java.util.ArrayList;
public class BasicCommandsReview {
private ArrayList<Integer> listaDeNumeros = new ArrayList<>();
private ArrayList<Integer> evenNumbersAsString = new ArrayList<>();
void printEvenNumbers(int num) {
for (int i=1; i<=num; i++) {
if (i%2==0) {
listaDeNumeros.add(i);
}
}
int j=0;
while(j < evenNumbersAsString.size() - 1){
System.out.print(evenNumbersAsString.get(j) + ",");
j++;
}
System.out.print(evenNumbersAsString.get(j));
}
void evenNumbersAsString(int num){
int j=0;
for (int i=1; i<=num; i++) {
if (i%2==0) {
evenNumbersAsString.add(i);
}
}
while(j < evenNumbersAsString.size() - 1){
System.out.print(evenNumbersAsString.get(j) + ",");
j++;
}
System.out.print(evenNumbersAsString.get(j));
}
}
运行测试时获取的日志:
2,4,6,8,10,12
junit.framework.ComparisonFailure: Array par -OK
Expected :2,4,6,8,10,12
Actual :null
2,4,6,8,10,12,14
junit.framework.ComparisonFailure: Array impar -OK
Expected :2,4,6,8,10,12,14
Actual :null
at junit.framework.Assert.assertEquals(Assert.java:100)
at junit.framework.TestCase.assertEquals(TestCase.java:261)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1466)
at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.callStatic(StaticMetaClassSite.java:65)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:222)
at BasicCommandsReviewTest.testEvenNumberAsString_Odd(BasicCommandsReviewTest.groovy:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at junit.framework.TestCase.runTest(TestCase.java:176)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at junit.framework.TestSuite.runTest(TestSuite.java:252)
at junit.framework.TestSuite.run(TestSuite.java:247)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)
Process finished with exit code 255
提前感谢所有可能出现的想法您的方法不会返回任何结果。它们不能是:它们具有
void
返回类型:
void evenNumbersAsString(int num){
您甚至可以将该方法作为方法参数调用的唯一原因是因为这是groovy。Java中的等价物:
assertEquals("Array par -OK", "2,4,6,8,10,12", commandReview.evenNumbersAsString(12));
这将是编译时错误,因为第三个参数的类型为void
。我不熟悉groovy,但它似乎将void
方法视为返回void
——这是不可实例化的,因此总是null
你在打印东西,而不是退回。如果要使用
assertEquals
检查结果,必须使方法返回一个值,例如String
方法不返回任何内容。它们不能是:它们具有void
返回类型:
void evenNumbersAsString(int num){
您甚至可以将该方法作为方法参数调用的唯一原因是因为这是groovy。Java中的等价物:
assertEquals("Array par -OK", "2,4,6,8,10,12", commandReview.evenNumbersAsString(12));
这将是编译时错误,因为第三个参数的类型为void
。我不熟悉groovy,但它似乎将void
方法视为返回void
——这是不可实例化的,因此总是null
你在打印东西,而不是退回。如果要使用
assertEquals
检查结果,必须使方法返回一个值,例如String
这是如何编译的?不能将对void
方法的调用用作方法参数。是。它与您的问题有关:删除@Test注释。您正在运行JUnit3测试,因此不应该向方法中添加@Test。它们是测试,因为方法名以test
开头。我更改了,它继续工作。我不知道。谢谢Stefan,别忘了在某个时候接受答案;-)这是如何编译的?不能将对void
方法的调用用作方法参数。是。这与您的问题无关:删除@Test注释。您正在运行JUnit3测试,因此不应该向方法中添加@Test。它们是测试,因为方法名以test
开头。我更改了,它继续工作。我不知道。谢谢Stefan,别忘了在某个时候接受答案;-)我甚至不知道我怎么能让这种事情发生。我真的没注意到。谢谢你,安迪。@CaioVitor请注意,如果你不打算使用Groovy动态类型,最好使用@CompileStatic
,这样会发现这个问题。好的,我会做的。谢谢你,夏普,我发现了那个很棒的部分@chrylis,当我添加*@CompileStatic时,我得到了如下错误:error:(11,9)Groovyc:[静态类型检查]-对方法的引用是不明确的。无法在[void junit.framework.TestCase#assertEquals(java.lang.String,java.lang.String,java.lang.String),void groovy.util.GroovyTestCase#assertEquals(java.lang.String,java.lang.Object,java.lang.Object)]错误:(16,9)Groovyc:[静态类型检查]-对方法的引用不明确。无法在[void junit.framework.TestCase#assertEquals(java.lang.String、java.lang.String、java.lang.String)之间进行选择,void groovy.util.GroovyTestI我甚至不知道我怎么会让这种事情发生。我真的没有注意到。谢谢你,安迪。@CaioVitor注意,如果你不打算使用groovy动态类型,最好使用@CompileStatic
,它会捕捉到这一点。好的,我会做的。谢谢你,我发现了groovy的部分!@chrylis,当我添加*@CompileStatic时,我得到如下错误:错误:(11,9)Groovyc:[静态类型检查]-对方法的引用不明确。不能在[void junit.framework.TestCase#assertEquals(java.lang.String,java.lang.String,java.lang.String),void groovy.util.GroovyTestCase#assertEquals之间进行选择(java.lang.String,java.lang.Object,java.lang.Object)]错误:(16,9)Groovyc:[静态类型检查]-对方法的引用不明确。无法在[void junit.framework.TestCase#assertEquals(java.lang.String,java.lang.String,java.lang.String),void groovy.util.GroovyTest之间进行选择