2014-11-25 106 views
0

我用JUnit Rule TemporaryFolder写了一些UT。 在我的UT,我嘲笑一个服务于这个目录返回这样的:JUnit规则TemporaryFolder - 竹错误

@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,它是一切OK,但是当我尝试在竹运行它,我有这样的错误:

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

我想不通为什么...

+0

你是如何传递'folder'到调用'FileUtils.listFiles'类?我假设在Bamboo中有多个测试正在运行。被测试的类是否是上下文的一部分? Bamboo是否重用了这个上下文,从而得到了被测试类的前一个实例? – 2014-11-25 12:12:16

+0

我的UT模拟器返回'folder'。并且该类不是上下文的一部分... 'when(myMock.doSomething())。thenReturn(folder.getRoot());' – bryce 2014-11-25 12:33:22

+0

是的,我看到了。关键是,这个模拟课程是如何提供给被测试的课程的?不知何故,你得到'目录'作为不是'TemporaryFolder'的文件夹将作为根提供的文件夹。所以不知怎么,你的班级在测试中不使用模拟或模拟不被重置。 – 2014-11-25 12:40:00

回答

0

最后我发现我的错误... 它无关,与规则的JUnit ...

这是当我试图列出在我的目录中的文件了,我想[TEMP_REPO] \测试\结构测试和分隔符写在哪里。所以我把它们替换成System.getProperty("file.separator"),一切都很顺利。

希望能帮助别人......