java - 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)
解决方案
与 java Scanner 迭代器相关的 Maven 构建似乎存在一些问题。我无法调试它,因为它非常不稳定。我通过更换解决了这个问题
Files.lines(new File(songsfile).toPath()).forEach(l -> getSongFromLine(songs, l));
现在一切正常。
推荐阅读
- javascript - Angular - 设置间隔在 for 循环内无法正常工作
- td-engine - 如何在 tdengine 中加入两个 stable
- python - 无法使用熊猫将大数据元组转换为数据框
- javascript - Issue with infite fetch loop using useEffect
- elasticsearch - 深入了解 Kibana 脚本字段
- redis - 如何在存储其他动态数据的同时利用 Redis 的地理空间功能
- javascript - Datamap 插件不显示地图
- javascript - Formatter AxisLabel Echarts fontWeight 不起作用
- javascript - 无法使用 nuxtjs 在生产中的异步数据中获取路由参数或查询
- java - 日志中的线程轮询计数超过池大小