您的位置:首页 > 其它

junit4.x初学问题曝光1

2010-05-03 09:34 106 查看
好久没有进行纯 j2se 的研究,现在由于应用需要经常需要做一些单体测试和一些用例分析,所以对junit4.x开始了研究,但是和junit3.x不同就是有了更好的测试方式和测试技巧,比如做的第一个parameterried的实例出现的问题,共享一下
简单的加减乘除方法
public class Calculator {

public int add(int a, int b){
return a + b;
}
public int minue(int a,int b){
return a-b;
}
public int multiply(int a ,int b){
return a*b;
}
public int divide(int a ,int b){
return a/b;
}
}

对其进行parameterried测试

import static org.junit.Assert.assertEquals;
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.*;
public class ParameterrizedTest {

private int expected;
private int input1;
private int input2;

@Parameters
@SuppressWarnings("unchecked")
public static Collection prepareData(){
return Arrays.asList(new Object[][]{
{5,3,2},{0,0,0},{-4,-1,-3},{1,-8,9}
});
}

public ParameterrizedTest(int expected,int input1,int input2){
this.expected = expected;
this.input1 = input1;
this.input2 = input2;
}

@Test
public void testAdd(){
Calculator cai = new Calculator();
assertEquals(expected,cai.add(input1, input2));
}
}

问题:
java.lang.Exception: Test class should have public zero-argument constructor
at org.junit.internal.runners.MethodValidator.validateNoArgConstructor(MethodValidator.java:54)
at org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:39)
at org.junit.internal.runners.TestClassRunner.validate(TestClassRunner.java:33)
at org.junit.internal.runners.TestClassRunner.<init>(TestClassRunner.java:27)
at org.junit.internal.runners.TestClassRunner.<init>(TestClassRunner.java:20)
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.internal.requests.ClassRequest.buildRunner(ClassRequest.java:33)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:28)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:26)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:24)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:40)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:30)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:445)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.NoSuchMethodException: com.test.junit.ParameterrizedTest.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getConstructor(Unknown Source)
at org.junit.internal.runners.MethodValidator.validateNoArgConstructor(MethodValidator.java:52)
... 18 more
这样的问题有好几类,比如ant的配置问题
但是我只单单使用myeclipse进行单体测试,所以最后检查了一遍测试代码,发现一个自己很严重的问题
把parameterrid中执行测试的开始最重要的东西遗漏@RunWith(Parameterized.class)
让我感到很傻,所以把这个问题保留下来提醒自己以后遇到类似问题的解决方式,先排查自己的程序的要点步骤,然后去一步步解决
本文出自 “三人行必有我师” 博客,请务必保留此出处http://00liuxiaolong.blog.51cto.com/967387/308813
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: