JUnit4参数化测试用例构造中super关键字的作用是什么
JUnit4参数化测试构造方法中super()的作用说明
你提供的测试示例代码如下:
package BasicTesting; import static org.junit.Assert.*; 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 Corrected_String_Test { public Corrected_String_Test(String input, String expected) { super(); this.input = input; this.expected = expected; } Corrected_StringRev ob=new Corrected_StringRev(); private String input; private String expected; @Parameters public static Collection<String[]> testConditions() { String expected[][]={{"acd","dca"},{"12d","d21"},{"j h","h j"},{" hg"," gh"},,{"&*","*&"}}; return Arrays.asList(expected); } @Test public void RevStringtest() { assertEquals(expected,ob.reverseString(input)); } }
该位置super()的具体作用
- 这个
super()是Java原生语法的构造方法调用,和JUnit4参数化测试的框架逻辑没有绑定关系。由于Corrected_String_Test没有显式继承任何自定义父类,默认直接继承Java顶层类Object,这里的super()就是显式调用Object类的无参构造方法,完成对象初始化时父类部分的逻辑。 - 这行代码基本都是IDE自动生成类构造方法时的默认模板输出,不是框架强制要求手动编写的内容。
不写super()的实际影响
- 不会产生任何运行层面的差异。Java编译器自带隐式插入规则:如果子类构造方法的第一行没有显式编写
super(...)调用父类构造、也没有this(...)调用本类其他构造方法,编译器会自动在构造方法的第一行补上无参的super()调用。也就是说你手动删掉这行代码后,最终编译生成的字节码和保留这行的版本完全一致,JUnit的参数注入、测试执行流程不会有任何变化。
示例代码的额外问题提示
你贴出的代码存在一处编译错误:testConditions方法里的二维数组定义多写了一个多余的逗号,位置在{" hg"," gh"}和{"&*","*&"}两个元素中间,删掉这个多余逗号后代码才能正常编译运行。
内容的提问来源于stack exchange,提问作者Julie
相关产品推荐
相关产品推荐

