![]() |
1
8
任何时候依赖外部数据源时,测试都可能失败。如果与数据库的连接断开怎么办?如果表不存在,您试图从中获取数据呢?如果你得到的数据不是你期望的数据呢? 测试连接到DBs的类比测试HelloWorld.java要复杂一些,因为您需要一些方法来 mock the DB . 你可以了解更多 Mock Objects here . 简而言之,你的测试/软件总是会失败。如果你不认为你的考试会失败,你就没有认真思考问题的空间。 |
![]() |
2
5
从数据库检索不是从TDD开始的。 你最好在网上看看TDD的一些例子。鲍勃·马丁的 bowling game scoring 是一个有趣的开始。 有人说。。。
目的不是返回数据,而是返回正确的数据。 对此进行测试的方法是为它提供一个数据库,该数据库应使它返回一个特定的结果并确保它返回。当然,除非您编写了正确的代码,否则这是不可能的,所以您首先编写测试,然后在看到测试失败后再编写真正的实现。 TDD涉及数据库的困难之处在于,使用真实数据库进行测试可能会很慢,并且使测试可重复可能会很困难,因为您的测试有时会更改数据。为了解决这些问题,您可以从以下工具获得帮助 DbUnit ,模拟JDBC,使用内存中的数据库,并使用回滚来确保测试不会进行永久性更改。 但你最好不要从数据库开始。 |
![]() |
3
3
TDD的优点在于,如果你发现一个很难写的测试,它就指向了设计中的一个潜在问题。在这种情况下,抽象数据访问逻辑。 例如,您可以使用依赖项注入将接口发送到数据访问存储库(在测试用例中使用假或模拟),该存储库将允许您将数据访问测试与逻辑测试隔离开来。也就是说,构建一个处理数据访问的SubmissionRepository,而您的submissions类处理业务逻辑,进入您的存储库进行基本的crud和整形操作。 当然,在某些时候,您需要测试一些数据访问,作为集成测试的一部分,但我总是使用从TDD开始的练习来帮助驱动更多的分离设计。 |
![]() |
4
3
如果希望测试失败,请让该方法引发RuntimeException。Eclipse将用一个合适的UnsupportedOperationException为您填充方法存根。 然后要使测试变为绿色,只需让方法返回null而不是抛出。 在一两个额外的测试迫使您连接到数据库之前,根本不必费心连接到数据库。 |
![]() |
5
2
好。有一些标准类型的东西需要测试:空字符串和空字符串。如果数据真的可以是任何东西,那么任何东西都是有效的。 从测试数据库开始可能不是深入TDD的最佳方法。从没有依赖关系的类开始。想象一场国际象棋比赛,你可能会有如下课程:
我会先从位置开始,因为它没有依赖关系,然后是正方形,因为它只依赖于位置,然后是木板,因为它只依赖于正方形。 |
![]() |
6
1
getSubMissionPage不应该只返回任何数据——它应该发出一个特定的请求,然后根据请求返回一些数据。 您需要将提交配置为使用模拟数据源,然后测试该类是否发出了相应的请求并将数据正确映射到对象中。 |
![]() |
7
0
您不必为每个方法编写测试。如果你认为一个测试太简单而不能中断,你可以决定不为它编写一个测试。有些人会说你还是应该写一个测试,但我认为有些情况下你不需要写。 看看这个JUnit常见问题: http://junit.sourceforge.net/doc/faq/faq.htm#best_3 |
![]() |
8
0
(1)和(2)只是一些练习,可以帮助你确定测试是否有效。 现在扪心自问:考试失败的原因可能是什么?我认为,在你的情况下,理由清单如下: 一。未连接到数据库 2。错误的数据库架构 三。不一致的数据 以下是模拟这些原因的方法: 一。关闭数据库或更改用于连接的凭据/jdbc URL。 2。删除感兴趣的表或更改其列的名称。 三。使数据不一致有点困难。当数据库约束没有正确定义时,通常会发生这种情况。有时人们这样做是为了使模式更通用。如果不是你的情况,就忘掉3。 祝TDD好运! 我相信将来你的测试场景会变得更加复杂。 |