tdd шаги для написания тестов junit для шаблона декоратора

Можно ли написать модульные тесты для ниже функциональности?

или же,

Можно ли развить ниже функциональность, используя TDD?

public ZipInputStream getZipInputStream(File zipFile) throws FileNotFoundException {
        ZipInputStream zipInputStream = new ZipInputStream(
                new FileInputStream(zipFile));
        return zipInputStream;
}

Я знаю, что этот вопрос может звучать глупо, но, как новичок в TTD, я не могу найти никакого решения для вышеизложенного:) .

3 ответа

Решение

Вы задали два вопроса в одном.

Можно ли написать модульные тесты для ниже функциональности?

Большинство людей не считают тест для этой функции "модульным тестом", потому что он должен взаимодействовать с файловой системой. Поэтому это скорее интеграционный тест, чем модульный тест. Однако, возможно это или нет, это не очень хорошая идея. Здесь нет ничего, что стоит проверить. Этот метод не имеет никакой собственной логики, поэтому нет смысла его тестировать. Все, что вы будете тестировать, это Java API.

Можно ли развить ниже функциональность, используя TDD?

При использовании TDD вы пишете код, который соответствует четким, проверяемым требованиям. Что-то такое маленькое, вряд ли будет иметь свои собственные требования. Требование, которое приводит к написанию этого кода, будет связано с обработкой данных, найденных в zip-файле. Таким образом, вы напишете метод, который делает намного больше, чем это, и, конечно, ему предшествует написание теста для этого метода.

Однако третьим этапом в процессе TDD является рефакторинг. (Помните "красный" - "зеленый" - "рефакторинг" - "красный" - "зеленый" - "рефакторинг"). Вы могли бы в конечном итоге написать метод, который вы цитировали; не пытаясь заставить тест работать, а скорее извлекая его из более крупного метода на этапе рефакторинга. Таким образом, ответ - да, возможно разработать эту функциональность, но, скорее всего, это будет на этапе "рефакторинга", а не на "зеленом" этапе.

Вы в основном объединяете 2 вызова платформы (new ZipInputStream() а также new FileInputStream()) без особой логики или условностей.

Это так просто, что я бы даже не стал проверять это.

В любом случае вы не можете протестировать шаблон декоратора, потому что он не реализован вами. Декоратор ZipInputStream сам.

Вы можете попытаться написать тестовый метод, который получает входной поток, украшающий фиктивный ZipFile, который вы предоставите. Создайте макет так, чтобы он возвращал ложные экземпляры ZipEntry, которые вы позже сможете проверить по ZipInputStream getNextEntry() метод.

Таким образом, вы можете проверить, что возвращаемый ZipInputStream действительно украшает предоставленный ZipFile (я бы предложил имя, такое как testReturnedZipInputStreamDecoratesProvidedZipFile() Или что-то вдоль этих линий...).

Другие вопросы по тегам