我目前正在为某个类(即内部类)中存在的类编写Junit。
public class MainClassJob {
public class UserRowMapper implements RowMapper<MyReport> {
@Override
public MyReport mapRow(ResultSet rs, int rowNum) throws SQLException {
MyReport r = new MyReport();
r.setDate(rs.getDate("CS_DATE"));
r.setFirstName(rs.getString("FNAME"));
r.setFirstName(rs.getString("LNAME"));
return r;
}
}
}
有人可以指导我如何将UserRowMapper部分作为JUnit覆盖率报告的一部分。
答案 0 :(得分:3)
另一个答案告诉您技术上如何到达:
有人可以指导我如何将UserRowMapper部分作为JUnit覆盖率报告的一部分。
...只需编写一个以某种方式运行的测试用例即可。
但是请注意:您是在问错误问题。您无需编写JUnit测试代码即可获得覆盖范围。您编写代码,以便您测试您的生产代码,以便在该代码错误时遇到错误,以便您以后可以更改生产代码,因为知道已经采取了一些措施 >验证,总体功能仍然正确。
换句话说:您应该问自己如何有意义地测试您的代码。像:该代码应做什么?存在哪些特殊情况?什么时候应该引发异常,等等。
然后编写涵盖所有这些方面的测试。
然后,最后,您可能希望收集覆盖率信息,以便了解从测试库中获得的覆盖率。
含义:不执行任何断言或检查的单元测试只能使您达到100%的覆盖率,这种测试几乎是无用的。他们唯一告诉您的是:您可以像在单元测试中一样运行该代码,而不会弹出异常。
答案 1 :(得分:0)
大概您有一个工厂方法来创建UserRowMapper
:
private MainClassJob job;
@BeforeEach
public void before() {
job = new MainClassJob(...);
}
@Test
public void mapRow() {
final UserRowMapper mapper = job.mapper();
final MyReport report = mapper.mapRow(...);
// verify the results...
}
如果没有,则使用job.new UserRowMapper()
实例化一个,尽管工厂方法更简洁,更直观。
也就是说,如果行映射器未使用父类的任何功能或成员(在您的示例中就是这种情况),为什么不static
呢?
答案 2 :(得分:0)
如果要测试用mapRow方法编写的逻辑,则可以轻松创建实例并发送模拟结果集并验证参数
MainClassJob mainClassJob = new MainClassJob();
MainClassJob.UserRowMapper userRowMapper = mainClassJob.new UserRowMapper();
userRowMapper.mapRow(mockResultSet,1)
但是,如果您的内部类不需要外部类中的任何成员,则意味着您应将其定义为静态类或,而应将其定义为完全独立的类。