繁体   English   中英

Junit参数化测试失败,并出现java.lang.IllegalArgumentException:参数类型不匹配

[英]Junit Parameterized Test fail with java.lang.IllegalArgumentException: argument type mismatch

我创建了以下代码,引发了“ java.lang.IllegalArgumentException:参数类型不匹配 ”异常。 我相信这是由错误的返回类型Iterable引起的。 但是我尝试了Collection和Iterable,两者都抛出了参数类型不匹配异常。 有人可以帮忙吗? 提前致谢。 从跟踪中,它在完成input()方法后引发异常。

@Parameterized.Parameters
public static Iterable<Object[]> input() {
    ArrayList<String>srcList = new ArrayList<String>();
    ArrayList<String>otherList = new ArrayList<String>();

    return Arrays.asList(new Object[][] {
        {srcList.add("https://www.test1.com"),20},
        {otherList.add("https://www.test2.com"),20}
    });
}

public WDDiffJunit2(ArrayList<String> url, int errCount) {
    this.url = url;
    this.errCount = errCount;
}

@Test
public void Test3() {     
    System.out.println("start test3");     
    loginPresenter.setModel(loginModel);
    loginPresenter.readProperties();
    loginPresenter.login();
    diffPresenter.setModel(diffModel);
    diffPresenter.setLoginModel(loginModel);
        assertEquals(errCount,diffPresenter.getExtractMaps(url,false).values().size());
}


public HashMap<String, String> getExtractMaps(ArrayList<String> urls, boolean isSource) {
     HashMap<String, String> a = new HashMap<String, String>();
     a.put("a","a");
     return a;
}

堆栈跟踪

java.lang.IllegalArgumentException:参数类型在sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native方法)处不匹配sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(45 ),位于org.junit.runners.Parameterized $ TestClassRunnerForParameters.createTest(Parameterized.java:86),位于org.junit.runners.BlockJUnit4ClassRunner $ 1.runReflectiveCall(BlockJUnit4ClassRunner,位于java.lang.reflect.Constructor.newInstance(Constructor.java:526) .java:236)位于org.junit.runners的org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:233)的org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)处。 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)上的BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:23) 1)在org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:60)在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)在org.junit.runners.ParentRunner.access $ 000(ParentRunner .java:50)org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:222)org.junit.runners.ParentRunner.run(ParentRunner.java:300)org.junit.runners.Suite.runChild (Suite.java:128)在org.junit.runners.Suite.runChild(Suite.java:24)在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:231)在org.junit.runners.ParentRunner org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)为org.junit.runners.ParentRunner.access为$ 1.schedule(ParentRunner.java:60)org.junit为$ 000(ParentRunner.java:50)。 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)处org.junit.runners.ParentRunner.run(ParentRunner.java:300)的Runners.ParentRunner $ 2.evaluate(ParentRunner.java:222) ),网址为org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference。 java:86)位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)在org.eclipse.org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)处org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) .jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

更换...

@Parameterized.Parameters
public static Iterable<Object[]> input() {
    ArrayList<String>srcList = new ArrayList<String>();
    ArrayList<String>otherList = new ArrayList<String>();

    return Arrays.asList(new Object[][] {
            {srcList.add("https://www.test1.com"),20},
            {otherList.add("https://www.test2.com"),20}
    });
}

...与:

@Parameterized.Parameters
public static Iterable<Object[]> input() {
    ArrayList<String> srcList = new ArrayList<String>();
    srcList.add("https://www.test1.com");
    ArrayList<String>otherList = new ArrayList<String>();
    otherList.add("https://www.test2.com");

    return Arrays.asList(new Object[][] {
            {srcList,20},
            {otherList,20}
    });
}

在原始形式中,您创建的是boolean, intObject[][] boolean, int因为srcList.add(...)返回boolean 如果将srcList和otherList填充在Object[][]初始化程序之外,则将得到正确类型的Object[][]List, int

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM