Модульный тест для метода с закрываемым параметром

#java #unit-testing #interface #junit

#java #модульное тестирование #интерфейс #junit

Вопрос:

Я новичок в модульном тестировании.

Как я должен написать тест JUnit для этого метода?

 public static void close(Closeable closeable) {
        if (closeable == null) {
            return;
        }
        try {
            closeable.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
  

Комментарии:

1. Издеваясь над закрываемым?

2. И вам даже не нужно использовать причудливую издевательскую библиотеку, такую как Mockito. Вы можете сделать это самостоятельно, создав класс, который реализует Closeable и имеет boolean isClosed поле, для которого вы установили значение true on close() , а затем можете проверить из своего теста.

Ответ №1:

Попробуйте:

 @Test
public void nominalClose() {
    Closeable closeable = new MyCloseable();
    Assert.assertFalse(closeable.isClosed());
    MyClass.close(closeable);    // call to the method you want to test
    Assert.assertTrue(closeable.isClosed());
}

@Test(expected = RuntimeException.class) 
public void ioExceptionClose() {
    Closeable closeable = new Closeable(){
        @Override
        public void close() {
            throw new IOException("test IO");
        }
    };
    MyClass.close(closeable);    // call should send a RuntimeException
}

// TODO: add more tests? Null? not IOException?

private static class MyCloseable implements Closeable {
    private boolean closed = false;
    @Overrive
    public void close() {
        closed = true;
    }
    public boolean isClosed() {
        return closed;
    }
}
  

Комментарии:

1. Добавьте случай, когда вы передаете null в MyClass.close(), и это идеально.

2. Да, могут быть добавлены другие тесты, я просто хотел показать основные.

3. Да, вы получили мой 1, потрясающий ответ!