Я пытался использовать MavenCli
, что дало ByteArrayOutpurStream
-s как stdout
и stderr
. У меня есть тесты, которые проверяют, что некоторые записи были записаны в эти потоки. Пока у меня есть один тест, все в порядке. Но, если я представим еще один тест, он терпит неудачу, так как в stdout ничего не записывается.MavenCli - stdout, stderr
Вот отрывок (Scala):
class MyIT extends SpecWithJUnit {
sequential
trait Ctx extends Scope {
val outStream = new ByteArrayOutpurStream()
val errStream = new ByteArrayOutpurStream()
val pomDir = Files.createTempDirectory("test_pom_").toFile
val mavenCli = new MavenCli()
def haveWrote(str: String): Matcher[Int] = {
contain(str) ^^ { (_: Int) =>
new String(outStream.toByteArray, "UTF-8") aka "written records" }
}
def maven(pom: Elem, goals: String*): Int = {
val pomFile = new File(pomDir, "pom.xml")
XML.save(pomFile.getCanonicalPath, pom)
System.setProperty(
"maven.multiModuleProjectDirectory",
pomDir.getCanonicalPath)
mavenCli.doMain(
goals.toArray,
pomDir.getCanonicalPath,
new PrintStream(outStream),
new PrintStream(errStream))
}
}
"test 1" should {
"write something" in new Ctx {
val pomXml =
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company</groupId>
<artifactId>some-artifact-id</artifactId>
<version>1.0.0-SNAPSHOT</version>
<description>some meaningful description</description>
<name>some catchy name</name>
...
</project>
maven(pomXml, "clean" "validate") must haveWrote("something")
}
"write something else" in new Ctx {
val pomXml =
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company</groupId>
<artifactId>some-artifact-id</artifactId>
<version>1.0.0-SNAPSHOT</version>
<description>some meaningful description</description>
<name>some catchy name</name>
... (different than the "write something" test)
</project>
maven(pomXml, "clean" "validate") must haveWrote("something else")
}
}
}
Если я закомментировать "write something"
тест, "write something else"
пассы.
Если я прокомментирую "write something else"
тест (и расторжение "write something"
), "write something"
проходит.
Если обе раскоментированы и выполнены, один сбой (, так как он является последовательным).
Добавление println
-s из outStream
после выполнения Maven, причина, кажется, что outStream
пусто ...
Я не могу понять, почему, или что еще более важно, как временное решение.
Любые идеи? ...
Спасибо заранее, Ohad