Anirudh
Anirudh

Reputation: 2326

Getting a runtime Exception with parameterized Junit test

@RunWith(value=Parameterized.class)
public class TestHashMapParams {

    HashMap dataToTest;
    String cont;
    public void TestHashMapParams(HashMap dataToTest)
    {
        this.dataToTest=cont;
    }


    @Test
    public void hashTest()
    {
        System.out.println(dataToTest.get("Key"));
    }


    @Parameters
    public static Collection giveMe()
    {
        ArrayList<HashMap[]> ab=new ArrayList<HashMap[]>();
        HashMap[] bc1=new HashMap[1];
        HashMap[] bc2=new HashMap[1];

        HashMap a1=new HashMap<>();
        HashMap a2=new HashMap<>();

        //HashMap arr[] = {new HashMap(), new HashMap()};
        ArrayList<HashMap> itrtor1=new ArrayList<HashMap>();
        ArrayList<HashMap> itrtor2=new ArrayList<HashMap>();

        a1.put("Key", "val1");
        a2.put("Key","val2");

        itrtor1.add(a1);
        itrtor2.add(a2);

        bc1=itrtor1.toArray(new HashMap[itrtor1.size()]);
        bc2=itrtor2.toArray(new HashMap[itrtor2.size()]);

        ab.add(bc1);
        ab.add(bc2);

        return ab;
    }
}



java.lang.IllegalArgumentException: wrong number of arguments
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

The above parameterized test meant to run two times giving a Runtime exception!! Though it runs two times but the above exception appears

What might be going wrong here??

Full stack trace

java.lang.IllegalArgumentException: wrong number of arguments
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.junit.runners.Parameterized$TestClassRunnerForParameters.createTestUsingConstructorInjection(Parameterized.java:186)
    at org.junit.runners.Parameterized$TestClassRunnerForParameters.createTest(Parameterized.java:181)
    at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:244)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:241)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.junit.runners.Suite.runChild(Suite.java:127)
    at org.junit.runners.Suite.runChild(Suite.java:26)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

/*******ignore below****************/ adding more details adding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more detailsadding more details

Upvotes: 1

Views: 1246

Answers (2)

Aguragorn
Aguragorn

Reputation: 627

Aside from correcting your constructor, you may also want to make use of the @BeforeClass annotation

i.e.

@BeforeClass
public void init(){
    //initialize dataToTest here
}

Upvotes: 1

BertongBadtrip
BertongBadtrip

Reputation: 36

you seem to have a class with "testHashMapParams " which should be "TestHashMapParams" for convention's sake.

Plus, you have a

public void testHashMapParams(HashMap cont) 

This method/function is identical with your "testHashMapParams " class name.

If this is not a typo, maybe you should rename/refactor the class name first then we'll see if that causes the problem.

Upvotes: 2

Related Questions