有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JUnit参数化测试IllegalArgumentException:参数数目错误

我正在开发一个JavaSpring项目。我对JUnit没有什么经验,在创建参数化测试时遇到了这个问题

我正在做一个ReportTableOperations方法的样本测试。addDurations(),它基本上是两个长值的总和

@RunWith(Parameterized.class)
public class ReportTableOperationsTest {

    @Parameters
    public static Collection<Object[]> data() {
      return Arrays.asList(new Object[][] {
          {3600L, 3600L, 7200L},
          {2000L, 3600L, 5600L}
      });
    }

    private long value1, value2, expected;

    public void AddDurationsTest(long value1, long value2, long expected) {
        this.value1 = value1;
        this.value2 = value2;
        this.expected = expected;
    }


    @Test
    public void testAddDurations() throws Exception {

        assertThat(ReportTableOperations.addDurations(value1, value2), is(expected));

    } 

 }

但是我在执行测试时遇到了以下错误:

**java.lang.IllegalArgumentException: wrong number of arguments**

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters.createTestUsingConstructorInjection(BlockJUnit4ClassRunnerWithParameters.java:43)
at org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters.createTest(BlockJUnit4ClassRunnerWithParameters.java:38)
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:539)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:761)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:461)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:207)

有人知道是什么导致了这一切吗


共 (1) 个答案

  1. # 1 楼答案

    构造函数名称应与类名相同,并且不应声明返回类型。您有类ReportTableOperationsTest和方法,它们假装是构造函数void AddDurationsTest。所以只要像这样修复它就行了

    private long value1, value2, expected;
    
    public ReportTableOperationsTest(long value1, long value2, long expected) {
        this.value1 = value1;
        this.value2 = value2;
        this.expected = expected;
    }