首页 > 解决方案 > JAVA maven全新安装测试未完成迭代器

问题描述

我有一个读取文件的简单脚本:

 /**
 * Takes a txt file with all songs listed in music directory
 * and saves this to the songs database
 */
public void rebuildFromFilelist() {
    final List<Song> songs = new ArrayList<>();

    try {
        final Scanner sc = new Scanner(new File(songsfile));
        sc.useDelimiter("\r?\n|\r");
        sc.forEachRemaining(l -> getSongFromLine(songs, l)); //function constructs a Song object

    } catch (final Exception e) {
        log.error("Error in processing file: {}", songsfile);
        e.printStackTrace();
    }

    songs.forEach(song -> log.debug(song.toString())); 

    songRepository.saveAll(songs);
}

然后我有一个测试:

@RunWith(SpringRunner.class)
@SpringBootTest
class SongRepositoryServiceTest {


@Autowired
private SongRepositoryService songRepositoryService;

@Test
@DisplayName("Rebuild library from file")
void RebuildLibraryWithFile() {
    songRepositoryService.rebuildLibraryWithFile();
    final List<Song> songs = songRepositoryService.findByCategory(Song.SongCategory.SONG);
    final List<Song> others = songRepositoryService.findByCategory(Song.SongCategory.OTHER);

    assertFalse(songs.isEmpty());
    assertFalse(others.isEmpty());
}
}

我正在处理的文件长约 620 项。前 400 个属于 SONG 类别,其余属于 OTHER 类别。

当我从 Intellij 运行测试时,测试成功。但是,如果我在 mvn clean install 期间运行它,它只会处理前 155 个项目并停止(因此第二个断言失败)。

为什么是这样?我该如何解决这个问题,甚至调试这个?

问候,

巴贝特

编辑:失败的测试只报告这个,没有错误或堆栈跟踪:

-------------------------------------------------------------------------------
Test set: com.gsm.GsmWeb.service.SongRepositoryServiceTest
-------------------------------------------------------------------------------
Tests run: 6, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.161 s <<< FAILURE! - in com.gsm.GsmWeb.service.SongRepositoryServiceTest
com.gsm.GsmWeb.service.SongRepositoryServiceTest.RebuildLibraryWithFile  Time elapsed: 0.532 s  <<< FAILURE!
org.opentest4j.AssertionFailedError: expected: <false> but was: <true>
    at com.gsm.GsmWeb.service.SongRepositoryServiceTest.RebuildLibraryWithFile(SongRepositoryServiceTest.java:88)

标签: javaspringunit-testingiteratormockito

解决方案


与 java Scanner 迭代器相关的 Maven 构建似乎存在一些问题。我无法调试它,因为它非常不稳定。我通过更换解决了这个问题

Files.lines(new File(songsfile).toPath()).forEach(l -> getSongFromLine(songs, l));

现在一切正常。


推荐阅读