Почему этот файл нельзя удалить? - PullRequest
0 голосов
/ 27 декабря 2011

Я написал модульный тест (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, он не релевантен.

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Простое нажатие File означает , а не означает, что будет создан фактический файл. Для этого вызовите createNewFile() или createTempFile() в этом случае.

В вашем тестовом методе вы, похоже, не передаете ссылку на этот файл кому-либо, кто мог бы создать файл или что-то в нем записать ... Я что-то упустил или в опубликованном вами коде отсутствуют некоторые ключевые строки? *

1 голос
/ 28 декабря 2011

Вы должны использовать правило 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");
    ...
  } 
}

Другие правила являются также частью Junit 4.

...