- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于我是 TDD 新手,所以我现在很难编写一些测试用例。比如我有这个dao方法,
public Customer getById(Long id) {
if (id < 1L) {
return null;
}
MapSqlParameterSource params = new MapSqlParameterSource("id", id);
return jdbcTemplate.queryForObject("select * from customer where id = :id", params, new RowMapper<Customer>() {
public Customer mapRow(ResultSet rs, int rowNum) throws SQLException {
return createCustomerFromResultSet(rs);
}
});
}
我希望对其进行负面测试。负面测试用例,
@Test
public void getByIdNegative() throws Exception {
Customer customer = customerDao.getById(-1L);
log.debug("Customer retrieved: " + customer);
assertNull(customer);
}
抛出异常,所以我在 dao 方法中编写了上面看到的 if 子句来解决它,但看起来这不是正确的方法。我应该期待异常(exception)吗?处理它?如果是的话,在哪一层以及如何进行?在这种情况下,阴性检测是必要的还是过度的?这是我现在脑子里的一些问题。我想知道如何按照正确的 TDD 原则干净地处理这个测试用例。
最佳答案
恕我直言,好的方法是从为您的方法编写 javadoc 开始。这就是它的规范。
它必须说明该方法执行什么操作、返回什么以及抛出什么异常。
queryForObject()
指定它抛出 IncorrectResultSizeDataAccessException
如果查询不正好返回一行。
您的方法也应该处理数据库中不存在 ID 的情况。它可以抛出相同的异常,或者抛出另一个异常,或者返回 null,或者返回一个空 Optional<Customer>
而不是Customer
。这是您的设计选择。
一旦做出选择,将其记录下来,并编写测试来验证此契约:
显然,使用 -1 进行测试,并为此特定标识符添加特殊情况是错误的。因为-1只是数据库中不存在的大量ID之一。该方法不得使测试通过。该方法必须执行其规范所述的操作。
关于java - 为 DAO 编写测试用例的最佳 TDD 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40509318/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!