用junit做测试的奇怪问题

时间:2011-04-14 18:00:55

标签: java junit tdd

我正在为自己写一个小电影库。这部分是为了学习TDD。现在我遇到了一个我无法解决的问题。

代码在https://github.com/hasanen/MovieLibrary/blob/master/movielibrary-core/src/test/java/net/pieceofcode/movielibrary/service/MovieLibraryServiceITC.java

问题在于,当我运行整个类(在eclipse中右击上面的类名)时,第二个测试失败,因为删除不成功。但是当右键单击该方法(getMovieGenres_getAllGenresAndRemoveOne_returnsTwoGenreAndIdsAreDifferent)并选择Run as Junit Test时,它可以工作。

我不一定需要修复,但至少有一些关于如何找到junit这样做的建议。

3 个答案:

答案 0 :(得分:3)

从解释问题的方式来看,问题似乎出现在setUp类中。 setUp类在每个测试用例调用之前运行。这是一般顺序。

1-添加三部电影。

2-测试是否有三部电影。

3-添加三部电影

4-删除电影项目#1。

由于序列1-4有效,问题是序列3.序列3吞下一些异常或改变底层对象。 (可能会改变序列。)在不知道addMovie如何更改底层对象的情况下,很难说清楚。

答案 1 :(得分:0)

测试类之外的某些东西(可能是超类)正在创建movieLibraryService,并且它不会像需要进行独立测试那样经常重新创建。

如果添加行

movieLibraryService = new MovieLibraryService();

testSetUp()方法的顶部,此服务将在每个测试方法运行之前正确重置,并且它们可能会正常运行。

实际上,我怀疑你在关于大小的断言上失败了,因为大小变为6而不是3。

或者,您可以添加一个拆除方法(注释为@After),删除电影库的内容,使其始终为空。

答案 2 :(得分:0)

恕我直言,问题是你的测试不是真正的单元测试而是集成测试。因此,在测试您的服务时,您正在测试它使用的所有层。我建议您使用mocks来实现较低层依赖项(EasyMock或其他),并仅对存储库层使用集成测试。这样,您可以在测试服务层时避免持久层影响。