用junit进行测试很奇怪的问题

| 我正在为自己写电影的小图书馆。这部分是为了学习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如此行为的建议。     
已邀请:
从您解释问题的方式来看,问题似乎出在setUp类中。 setUp类在每次测试用例调用之前运行。这是一般顺序。 1-添加三部电影。 2-测试是否存在三部电影。 3-添加三部电影 4-删除电影项目#1。 由于序列1-4有效,所以问题出在序列3上。要么序列3吞下某些异常,要么对基础对象进行突变。 (可能会更改序列。)不知道addMovie如何更改基础对象,很难分辨。     
测试类之外的东西(可能是超类)正在创建
movieLibraryService
,并且它的创建频率没有达到独立测试所需的频率。 如果添加行
movieLibraryService = new MovieLibraryService();
testSetUp()
方法的顶部,将在运行每种测试方法之前正确重置此服务,并且它们可能会正常运行。 实际上,我怀疑您在有关大小的声明上失败了,因为大小正变为6而不是3。 另外,您可以添加一个拆解方法(用
@After
注释),该方法将删除影片库的内容,以便始终将其开始为空。     
恕我直言,问题在于您的测试不是真正的单元测试,而是集成测试。因此,在测试服务时,您正在测试其使用的所有层。我建议您对低层依赖项(EasyMock或其他)使用模拟,并仅对存储库层使用集成测试。这样,您可以在测试服务层时避免持久层的影响。     

要回复问题请先登录注册