我编写了单元测试(JUnit 4),它执行一些逻辑并将结果写入文件。在@Before
带注释的方法中,它创建文件,在@After
中应该删除该文件。它不是,我无法弄明白,为什么。
我正在使用Google Guava 10.01 Files 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无关。
答案 0 :(得分:2)
只需即时File
不意味着将创建实际文件。为此,请在该实例上调用createNewFile()
或createTempFile()
。
在您的测试方法中,您似乎没有将该文件引用传递给任何可能创建该文件或在其中写入任何内容的人...我错过了什么或者您发布的代码是否缺少某些关键行?
答案 1 :(得分:1)
您应该将TemporaryFolder规则与JUnit 4一起使用。这将处理临时测试目录和文件的设置和拆除。
public static class HasTempFolder {
@Rule public TemporaryFolder folder= new TemporaryFolder();
@Test public void testUsingTempFolder() throws IOException {
File createdFile= folder.newFile("myfile.txt");
...
}
}
Other Rules也是Junit 4的一部分。