gpt4 book ai didi

java - 单元测试,我应该修改方法参数吗

转载 作者:行者123 更新时间:2023-11-29 04:35:04 25 4
gpt4 key购买 nike

我目前正在处理一个令人讨厌的遗留项目,我很乐意为我修复的任何内容添加单元测试。

public abstract class AbstractYYY extends XX {

private LoginDTO selectedLogin;
private Tab tab;
private GenericJobDTO job;



@Override
public void action() throws TabException {
JobContainerDTO jobContainer = tab.getRoot().getData();

jobContainer.setUser(tab.getUsername());
jobContainer.setServer(tab.getConnectorURL());
jobContainer.setPlatform(tab.getPlatform());
jobContainer.setLoginID(selectedLogin.getId());

if (jobContainer.getApp().equals(App.TEST)) {
if (job instanceof JobDTO) {
((JobDTO) job).setLoginId(selectedLogin.getId());
((JobDTO) job).setZoneId(jobContainer.getZoneId());
}

if (job instanceof JobAutoDTO) {
((JobAutoDTO) job).setLogin(selectedLogin.getId());
if(selectedLogin.getConnector() != null ){
((JobAutoDTO) job).setConnectorId(selectedLogin.getConnector().getId());
}
}
}


if (jobContainer.getStatus() != 1 ) {
jobContainer.setLastRunStartTime(0);
jobContainer.setLastRunEndTime(0);
jobContainer.setLog("");
}

job.setId(UUID.randomUUID().toString());
jobContainer.setJobXYZasJSON(job.toJson());
jobContainer.setWorker(job.getWorker());
jobContainer.setId(savedID);


if (jobController != null) {
jobController.action();
}

}

.
.
.
.

}

我想测试我的 jobContainer 是如何填充的,所以我创建了一个类似

的方法

JobContainerDTO setContainerInfo(JobContainerDTO jobContainer, Tab tab...)

但这意味着我必须修改参数jobContainer,这似乎不是一个好主意。

你会如何测试这个方法?

最佳答案

我会创建两个辅助类。

一个用于填充jobContainer,另一个专门用于填充job。

JobContainerResolver

public class JobContainerResolver{

private JobContainer jobContainer;

public JobContainerResolver(JobContainer jobContainer){
this.jobContainer = jobContainer;
}

public void fillWithTabData(Tab tab){
jobContainer.setUser(tab.getUsername());
jobContainer.setServer(tab.getConnectorURL());
jobContainer.setPlatform(tab.getPlatform());
}

public void fillWithJobData(Job job){
jobContainer.setJobXYZasJSON(job.toJson());
jobContainer.setWorker(job.getWorker());
}

public void fillWithIds(SelectedLogin login, Integer savedID){
jobContainer.setId(savedID);
jobContainer.setLoginID(selectedLogin.getId());
}

}

作业解析器

public class JobResolver{

private Job job;

public JobResolver(Job job){
this.job = job;
}

public fillWithBasicData(JobContainer, SelectedLogin){
if (jobContainer.getApp().equals(App.TEST)) {
if (job instanceof JobDTO) {
((JobDTO) job).setLoginId(selectedLogin.getId());
((JobDTO) job).setZoneId(jobContainer.getZoneId());
}

if (job instanceof JobAutoDTO) {
((JobAutoDTO) job).setLogin(selectedLogin.getId());
if(selectedLogin.getConnector() != null ){
((JobAutoDTO) job).setConnectorId(selectedLogin.getConnector().getId());
}
}
}
}
}

action() 方法

@Override
public void action() throws TabException {
JobContainerDTO jobContainer = tab.getRoot().getData();

JobContainerResolver jcResolver = buildJobContainerResolver(jobContainer);

JobResolver jResolver = buildJobResolver(job);

jcResolver.fillWithTabData(tab);
jcResolver.fillWithJobData(job);
jcResolver.fillWithIds(selectedLogin, savedID);

jResolver.fillWithBasicData(jobContainer, selectedLogin);
}

public JobContainerResolver buildJobContainerResolver(JobContainer jc){
return new JobContainerResolver(jc);
}

public JobResolver buildJobResolver(Job job){
return new JobResolver(job);
}

使用这种结构,您可以单独测试不同的设置和 action() 方法本身。你只需要玩一下模拟。

关于java - 单元测试,我应该修改方法参数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41954181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com