Я использую муравей 1.8.2. Допустим, тест не пройден с ошибкой stackoverflow.
import junit.framework.TestCase;
/**a failing test */
public class FailingTest extends TestCase
{
public void testFail() {
testFail();// gives stackoverflow- result xml is now a large document
}
}
Запуск junitreport завершится с ошибкой ниже
[junitreport] jar: file: //lib/ant-junit.jar! /Org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl: 65: 57:
Фатальная ошибка! java.lang.StackOverflowError Причина:
java.lang.StackOverflowError
Причиной, по-видимому, является большой текст в XML-файле результатов теста.
<testcase classname="chs.FailingTest" name="testFail" time="0.012">
<error type="java.lang.StackOverflowError">java.lang.StackOverflowError
at chs.FailingTest.testFail(FailingTest.java:14)
at chs.FailingTest.testFail(FailingTest.java:14)
at chs.FailingTest.testFail(FailingTest.java:14) ....
Полагаю, xslt нужно обрезать и пропустить большое сообщение об ошибке. Как можно исправить?
// Временное исправление: пропустить такой большой текст из результата html
требуется редактирование в файлах junit-xslt
<xsl:template name="br-replace">
<xsl:param name="word"/>
<xsl:if test="string-length($word) < 31024 "> //very large size here causes stackoverflow
<xsl:choose>
<xsl:when test="contains($word, '
')">
<xsl:value-of select="substring-before($word, '
')"/>
<br/>
<xsl:call-template name="br-replace">
<xsl:with-param name="word" select="substring-after($word, '
')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$word"/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
Окончательное исправление: увидев ответы ниже, я проверил сайт разработки муравьев.
У SVN есть новый xslt: http://svn.apache.org/viewvc/ant/core/trunk/src/etc/junit-frames-xalan1.xsl?view=co&content-type=text%2Fplain, который обновил шаблон так, как показано ниже
<xsl:template name="br-replace">
<xsl:param name="word"/>
<xsl:param name="br"><br/></xsl:param>
<xsl:value-of select='stringutils:replace(string($word),"
",$br)'/>
</xsl:template>