junit4.x初学问题曝光1

好久没有进行纯 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)
让我感到很傻,所以把这个问题保留下来提醒自己以后遇到类似问题的解决方式,先排查自己的程序的要点步骤,然后去一步步解决

你可能感兴趣的:(职场,初学,休闲,曝光)