单元测试覆盖方法调用super()

时间:2011-07-11 02:37:46

标签: java unit-testing override super

我正在试图找出为重写方法编写单元测试的最佳方法,该方法将super()作为最后一步。基本上,我想在基类中使用之前按摩参数。

以下是方法示例:

    @Override
    public JobExecution run(Job job, JobParameters passedParams) 
            throws JobExecutionAlreadyRunningException, JobRestartException {

        JobParameters launchParameters;

        if(passedParams.isEmpty()) {
            launchParameters = jobParameterSetter.getJobParameters();
        } else {
            launchParameters = passedParams;
        }

        return super.run(job, launchParameters);
    }

归结为我无法找到一个接缝来检查最终的super.run()调用中的参数,这是我想要测试的。基类有几个依赖项,并且实际上没有必要测试该类(更不用说更多的工作)。

组合是一个解决方案,但它是一个相当复杂的基类,我需要暴露整个事情,同时只重写几个方法。

我也在考虑伪造基类进行测试,这很简单,但我不确定如何更改类路径只是为了运行单元测试(Eclipse用于单个测试; Maven用于构建测试 - 也许一个问题本身?)。

<小时/> 我不得不想象这已经被问到了,但我找不到完全匹配。

1 个答案:

答案 0 :(得分:1)

您希望测试的逻辑似乎是if-else流,而不是对基类的调用。我会通过创建一个名为getLaunchParameters(JobParameters jobParameters)的受保护方法来做到这一点,该方法可以完成您感兴趣的逻辑测试。

这样,您测试的逻辑就会被测试,您对测试不感兴趣的逻辑没有经过测试,并且您已经打破了一段代码,这些代码可以在将来的某个地方使用。