2014-11-25 38 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"),一切都很順利。

希望能幫助別人......