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
简单的加减乘除方法
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
相关文章推荐
- 初学回溯,哈密尔顿回路问题的实现
- 初学MySql5 所应了解的知识和常见问题
- 关于初学WCF时,调用方未由服务进行身份验证的问题
- java 关于初学面向对象的问题四:抽象类
- spring初学碰到的问题(一)
- [CUDA]初学CUDA遇到的比较烧脑的问题
- 初学Python-问题1
- python初学问题1
- php初学常见问题
- 【转】关于int范围中负数最小值的绝对值比整数最大值大初学C,问题源自:为什么C中的int类型(16位)的下溢下限为-32768而上溢上限却是32767。 首先说吧,32767很容易理解,32767
- java 关于初学面向对象的问题九:java开发的某些机制
- Android初学习 - 在BroadcastReceiver中启动Activity的问题
- 初学PHP的朋友 经常问的一些问题。不断更新
- 初学Android遇到的问题
- 初学wix遇到的问题以及解决方案
- 初学lua --lua嵌入c++的一个问题(初始化lua出错,版本问题)
- 初学jQuery就遇到问题
- android初学问题
- 初学Linux[17]--加入Linux阵营初期:初学者常问的八大问题解疑
- C语言/C++初学 问题