Исключение cucumber.runtime.CucumberException: java.io.IOException: Failed to create directory ...
возникает, когда файл с именем выходного каталога (target/cucumber
) уже существует.
Предполагается следующая структура
src/test/java/runner/TestRunner.java
pom.xml
pom.xml зависимости
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.cucumber>2.0.0</version.cucumber>
</properties>
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${version.cucumber}</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${version.cucumber}</version>
<scope>test</scope>
</dependency>
</dependencies>
TestRunner.java
package runner;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(plugin = { "html:target/cucumber" })
public class TestRunner {
}
шаги для воспроизведения
$ mvn clean test-compile
$ echo "some text" > target/cucumber
сейчас в виде файла target/cucumber
существует, запустите тест
$ mvn test
с ошибкой
Caused by: cucumber.runtime.CucumberException: java.io.IOException: Failed to create directory /tmp/cuke.test/target/cucumber
at cucumber.runtime.formatter.HTMLFormatter.createReportFileOutputStream(HTMLFormatter.java:520)
at cucumber.runtime.formatter.HTMLFormatter.createJsOut(HTMLFormatter.java:510)
at cucumber.runtime.formatter.HTMLFormatter.<init>(HTMLFormatter.java:123)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
На основе номеров строк в приведенной выше трассировке стека и на снимке экрана с OP.Похоже, что OP использует версию Cucumber 2.0.0-SNAPSHOT
.Поскольку метод reportFileOutputStream
был переименован в классе HTMLFormatter
в createReportFileOutputStream
(SHA1: 486b82cb9 ).Это было до выхода версии Cucumber 2.0.0
.
edit: Некоторое более подробное объяснение.Основная проблема заключается в том, что плагины пытаются создать запись каталога с таким же именем target/cucumber
.
- html - создаст каталог
target/cucumber
- json - создаст файл
target/cucumber
Как упоминалось выше, выдается исключение Failed to create directory
, когда должен быть создан каталог, а файл с таким же уже существует.
Может воспроизводиться со следующими CucumberOptions
в TestRunner.java
.
@CucumberOptions(plugin = {"json:target/cucumber", "html:target/cucumber"})
cucumber.runtime.CucumberException: cucumber.runtime.CucumberException: \
java.io.IOException: Failed to create directory /.../target/cucumber
Примечание: В коде OP порядок подключаемых модулей не json - html
это html - json
.Следовательно, в приведенном выше фрагменте кода использовался только плагин html
, и перед запуском теста был создан файл target/cucumber
.
Использование плагинов в том же порядке, как показано на скриншоте OP, вызывает другое исключение.
@CucumberOptions(plugin = {"html:target/cucumber", "json:target/cucumber"})
cucumber.runtime.CucumberException: java.io.FileNotFoundException: \
target/cucumber (Is a directory)
На основании шагов, использованных для воспроизведения коллизии, порядок плагинов и исключение на скриншоте не совпадают.
Скорее всего, при изменении имени выходного файла плагина json ("json:target/cucumber.json"
) произойдетрешить вопрос.