我寫單元測試(JUnit 4中),它執行一些邏輯和寫入結果到文件。在@Before
註釋的方法它創建文件,並在@After
該文件應該被刪除。這不是,但我無法弄清楚,爲什麼。爲什麼這個文件不能被刪除?
我使用谷歌番石榴10.01文件API。這裏是我的單元測試代碼:
public class CashierTest extends ContextedTest {
private File cashierFile;
@Before
public void createFile() throws Exception {
cashierFile = new File("D://workspace-sts/spring-miso/cashier.txt");
cashierFile.createNewFile();
}
@After
public void release() {
if (cashierFile.exists()) {
if (!cashierFile.delete()) {
System.out.println("Couldn't delete cashier file");
}
}
cashierFile = null;
}
@Test
public void testCashier() throws Exception {
// file shouldn't contain any text
assertFalse(Files.toString(cashierFile, Charset.defaultCharset()).length() > 0);
Cashier cashier = (Cashier) context.getBean("cashier");
ShoppingCart cart = (ShoppingCart) context.getBean("shoppingCartPrototype");
cashier.checkout(cart);
assertTrue(cashierFile.exists());
// file should contain text now
assertTrue(Files.toString(cashierFile, Charset.defaultCharset()).length() > 0);
}
@Override
protected void setPath() {
path = "sk/xorty/advancedioc/beans.xml";
}
}
注:ContextedTest
超是我測試的持有Spring容器它是不相關的ATM。
莫非,該文件已被測試的一個打開,但沒有正確關閉,也就是說,仍有一些開放流躺在附近的一部分,哪些引用文件? – Dirk
@Dirk:不,我不這麼認爲,這是使用該文件的唯一測試。 – Xorty
@Dirk:其實是的,收銀員已經開了流:)寫下答案,我會接受它。 – Xorty