【发布时间】:2021-07-20 10:31:00
【问题描述】:
我有这个问题,我正在创建一个 Junit 测试,我想先用 setUp 方法做点什么。查看我的示例代码:
class ClassDaoImplTests {
@Autowired
private NamedParameterJdbcTemplate template;
private Project modifiedProject;
private Project origProject;
List<Project> projList;
@BeforeAll
protected void setUp() {
preserveOriginalProjectData();
prepareProjectDataToUpdate();
}
public void preserveOriginalProjectData() {
projList = getSortedProjectList();
origProject = projList.get(0);
}
public void prepareProjectDataToUpdate() {
modifiedProject = projList.get(0);
modifiedProject.setProjName(modifiedProject.getProjName() + "_Edit");
}
public List<Project> getSortedProjectList() {
String sql = "SELECT * FROM Table1 ORDER BY id ASC";
return template.query(sql, new BeanPropertyRowMapper<Project>(Project.class));
}
}
无论我对modifiedProject 做什么,它都会反映在origProject 对象以及列表中的对象上。即使我使用这种方法,结果也是一样的:
protected void setUp() {
projList = getSortedProjectList();
origProject = projList.get(0);
prepareProjectDataToUpdate();
}
如何保留原始对象的数据?
我没有包含其他代码来最小化代码的大小。但只是陈述逻辑。
其实我想要tearDown() 的origProject 数据来恢复表中的值。
【问题讨论】:
-
将 projList.element 作为值传递给 prepareProjectDataToUpdate 方法,或者在 prepareProjectDataToUpdate() 中为 Project 创建一个新变量
-
谢谢@talex。这给了我一个关于如何使用克隆来获得单独副本的新想法。但是在这个阶段不允许更改模型。对于 Mohit Hurat 的建议,我尝试通过在 prepareProjectDataToUpdate(Project project) 中将其设为参数来传递它。但得到了相同的结果。不知道我是否得到你的建议,但谢谢。
标签: java spring-boot junit java-8 spring-jdbc