2013-08-01 40 views
1

我正在尝试在Junit中完成参数化,但在我的情况下它给了我错误。 这是我在线教程中获得的代码。使用构造函数在Junit中进行参数化

import java.util.Arrays; 
import java.util.Collection; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 
import org.junit.runners.Parameterized.Parameters; 
@RunWith (Parameterized.class) 
public class parametrization { 


    public String username; 
    public String password; 
    public int pincode; 


    public parametrization (String username, String password, int pincode){ 
     this.username=username; 
     this.password=password; 
     this.pincode=pincode; 
    } 

@Parameters 
public static Collection<Object[]> getdata(){ 
    Object[][] data = new Object[2][3]; 
    //row 1st 
    data [0][0] = "usernamea"; 
    data [0][1] = "passa"; 
    data [0][2] = "111"; 

    //row 2nd 
    data [1][0] = "usernameb"; 
    data [1][1] = "passb"; 
    data [1][2] = "222"; 

    return Arrays.asList(data); 
    } 


    @Test 
    public void testlogin() 
     { 
     System.out.println(username + "--" + password + "--" + pincode); 
     } 
} 

在上面的代码的执行,我得到了像

java.lang.IllegalArgumentException: argument type mismatch 
    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) 

错误是否有基于m缺少的东西?

+0

对不起,这是没有意义的我。你想达到什么目的?这似乎是一个简单的问题,你通过引入不必要的复杂性而变得困难。这仅仅是你真正想要做的一个简单的例子吗? – duffymo

+0

是的,我是新来的。所以从简单的代码开始。 – Bhomik

+0

不,这并不简单。 – duffymo

回答

5

您的问题是,第三个参数是一个int,你传递一个String

public parametrization (String username, String password, int pincode){ 
    this.username=username; 
    this.password=password; 
    this.pincode=pincode; 
} 

更改此

@Parameters 
public static Collection<Object[]> getdata(){ 
    Object[][] data = new Object[2][3]; 
    //row 1st 
    data [0][0] = "usernamea"; 
    data [0][1] = "passa"; 
    data [0][2] = "111"; 

这个

@Parameters 
public static Collection<Object[]> getdata(){ 
    Object[][] data = new Object[2][3]; 
    //row 1st 
    data [0][0] = "usernamea"; 
    data [0][1] = "passa"; 
    data [0][2] = new Integer(111); 
+0

thnx。它解决了我的问题。 – Bhomik

0

否则你可以简单删除int的double qoutes(“”),它应该可以正常工作。

@参数 公共静态采集的getData(){

Object obj[][] = new Object[4][3]; 

    obj[0][0] = "Kevin"; 
    obj[0][1] = "Anderson"; 
    obj[0][2] = 270123; 
相关问题