【问题标题】:JUnit rules TemporaryFolder - Error on BambooJUnit 规则 TemporaryFolder - Bamboo 上的错误
【发布时间】:2023-04-01 13:51:01
【问题描述】:

我用 JUnit Rule TemporaryFolder 写了一些 UT。 在我的 UT 中,我模拟了一个服务来返回这个目录,如下所示:

@Rule
public TemporaryFolder folder = new TemporaryFolder();
...
@Test
public void myTest(){
    when(myMock.doSomething()).thenReturn(folder.getRoot());
...

然后在服务中,文件夹是这样使用的:

IOFileFilter filtreBasique = new NameFileFilter(tagRCPName + ".xml", IOCase.INSENSITIVE);
FileUtils.listFiles(folder, filtreBasique, TrueFileFilter.TRUE);

当我在我的电脑上运行我的 UT 时,一切正常,但是当我尝试在 Bamboo 上运行它时,我遇到了这个错误:

java.lang.IllegalArgumentException: Parameter 'directory' is not a directory
at org.apache.commons.io.FileUtils.listFiles(FileUtils.java:358)

我不知道为什么......

【问题讨论】:

  • 你如何将folder 传递给调用FileUtils.listFiles 的类?我假设在 Bamboo 中有多个测试正在运行。被测类是上下文的一部分吗? Bamboo 是否重用了这个上下文,从而获得了被测类的先前实例?
  • folder 由我的 UT 模拟返回。而且该类不是上下文的一部分...when(myMock.doSomething()).thenReturn(folder.getRoot());
  • 是的,我看到了。关键是,模拟是如何提供给被测类的?不知何故,您将 directory 作为文件夹,而 TemporaryFolder 不会作为根提供。因此,不知何故,您的被测类没有使用模拟,或者模拟没有在测试之间重置。
  • 感谢您的帮助,但我发现我的错误并没有什么严重的......

标签: java junit bamboo rule


【解决方案1】:

我终于发现我的错误了... 它与 Rule JUnit 无关...

当我试图列出我的目录中的文件时,我有一个类似 [TEMP_REPO]\test\test 的结构和硬写的分隔符。所以我用System.getProperty("file.separator") 替换它们,一切都很顺利。

希望这可以帮助某人...

【讨论】:

    猜你喜欢
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多