You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:01:20