【发布时间】: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不会作为根提供。因此,不知何故,您的被测类没有使用模拟,或者模拟没有在测试之间重置。 -
感谢您的帮助,但我发现我的错误并没有什么严重的......