How to get full stack traces logged when a JUnit t

2020-03-08 00:25发布

问题:

When a JUnit test throws a runtime exception while running in Eclipse, you can see the entire stack trace.

Our build server uses ant and runs JUnit, but the printout on failure only provides the exception's message, not the entire "printStackTrace". Is there a convenient way to get this functionality?

回答1:

I've posted this answer to this question before realizing that it was a duplicate of yours.

Here is my junit tag that does produce the exception trace.

<junit
  showoutput="yes"
  errorProperty="test.failed"
  failureProperty="test.failed"
  haltOnFailure="${test.halt-on-failure}"
  fork="yes"
  forkmode="${junit.forkmode}"
>
  <classpath>
    <pathelement location="${classes.dir}"/>
    <pathelement location="${classes-under-test.classes.dir}" />
  </classpath>

  <!-- #Formatters for capture and display -->
  <formatter
    type="brief"
    usefile="false"
  />
  <formatter type="brief" />
  <formatter
    type="xml"
    if="test.generate.xml.output"
  />

  <!-- #Test case isolation technique -->
  <test
    name="${testcase}"
    if="testcase"
  />

  <batchtest
    todir="${test.data.dir}"
    unless="testcase"
  >
    <fileset dir="${classes.dir}">
      <include name="**/Test*.class" />
      <exclude name="**/Test*$*.class" />
    </fileset>
  </batchtest>

</junit>

I think the one nested element that will do it for you is

  <formatter
    type="brief"
    usefile="false"
  />


回答2:

There is a setting in JUnit BaseTestRunner limiting this value:

/**
  * Truncates a String to the maximum length.
  */
public static String truncate(String s) {
    if (fgMaxMessageLength != -1 && s.length() > fgMaxMessageLength)
        s= s.substring(0, fgMaxMessageLength)+"...";
    return s;
}

You can change this value by setting:

BaseTestRunner.setPreference("maxmessage", "-1");


标签: ant junit