Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ScalaTest DeferredAbortedSuite error when running simple tests.

My original code had a lot more going on, which distracted me from the true cause of the problem. This captures the essential problem.

import org.scalatest.AsyncFlatSpec
import scala.concurrent.Future

class AsyncFlatSpecSpec extends AsyncFlatSpec
{
  it should "parse an XML file" in {
    // ... Parsing ...
    Future.successful(succeed)
  }

  it should "parse an XML file" in {
    // ... Serializing ...
    Future.successful(succeed)
  }
}

This produced these errors:

[info] DeferredAbortedSuite:
[error] Uncaught exception when running AsyncFlatSpecSpec: java.lang.ArrayIndexOutOfBoundsException: 17
[trace] Stack trace suppressed: run last test:testOnly for the full output.

There is no array access happening anywhere in my code. What's going on?

Running "last test:testOnly" wasn't much help:

[info] DeferredAbortedSuite:
[error] Uncaught exception when running AsyncFlatSpecSpec: java.lang.ArrayIndexOutOfBoundsException: 17
sbt.ForkMain$ForkError: java.lang.ArrayIndexOutOfBoundsException: 17
  at org.scalatest.exceptions.StackDepth$class.stackTraceElement(StackDepth.scala:63)
  at org.scalatest.exceptions.StackDepth$class.failedCodeFileName(StackDepth.scala:77)
  at org.scalatest.exceptions.StackDepthException.failedCodeFileName(StackDepthException.scala:36)
  at org.scalatest.exceptions.StackDepth$class.failedCodeFileNameAndLineNumberString(StackDepth.scala:59)
  at org.scalatest.exceptions.StackDepthException.failedCodeFileNameAndLineNumberString(StackDepthException.scala:36)
  at org.scalatest.tools.StringReporter$.withPossibleLineNumber(StringReporter.scala:442)
  at org.scalatest.tools.StringReporter$.stringsToPrintOnError(StringReporter.scala:916)
  at org.scalatest.tools.StringReporter$.fragmentsForEvent(StringReporter.scala:747)
  at org.scalatest.tools.Framework$SbtLogInfoReporter.apply(Framework.scala:622)
  at org.scalatest.tools.FilterReporter.apply(FilterReporter.scala:41)
  at org.scalatest.tools.SbtDispatchReporter$$anonfun$apply$1.apply(SbtDispatchReporter.scala:23)
  at org.scalatest.tools.SbtDispatchReporter$$anonfun$apply$1.apply(SbtDispatchReporter.scala:23)
  at scala.collection.Iterator$class.foreach(Iterator.scala:893)
  at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
  at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
  at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
  at org.scalatest.tools.SbtDispatchReporter.apply(SbtDispatchReporter.scala:23)
  at org.scalatest.tools.Framework$SbtReporter.apply(Framework.scala:1119)
  at org.scalatest.tools.Framework.org$scalatest$tools$Framework$$runSuite(Framework.scala:387)
  at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:506)
  at sbt.ForkMain$Run$2.call(ForkMain.java:296)
  at sbt.ForkMain$Run$2.call(ForkMain.java:286)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
  at java.lang.Thread.run(Thread.java:745)

Confused, I retreated to the non-Async version, to see if that fared any better.

import org.scalatest.FlatSpec
class FlatSpecSpec extends FlatSpec {

  it should "parse an XML file" in {
    // ... Parsing ...
    succeed
  }

  it should "parse an XML file" in {
    // ... Serializing ...
    succeed
  }

}

It produced this different, but still cryptic error message:

[info] DeferredAbortedSuite:
[info] Exception encountered when attempting to run a suite with class name: org.scalatest.DeferredAbortedSuite *** ABORTED *** (20 milliseconds)
[info]   Exception encountered when attempting to run a suite with class name: org.scalatest.DeferredAbortedSuite (AsyncFlatSpecSpec.scala:32)
[info] ScalaTest

For completeness, here are the related portions of my build.sbt:

scalaVersion := "2.11.8"
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0-M15" % "test"
libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.0-M15"

This was ultimately a trivial mistake on my part, but I wanted to post this for the sake of anyone else Googling these errors.

like image 682
Bill Frasure Avatar asked May 03 '16 21:05

Bill Frasure


1 Answers

As many readers probably noticed while going through the examples, the problem was that I had copy/pasted the same test description. This allows the code to compile, but will fail at runtime with errors that don't identify the description as the culprit.

Stupid error on my part, but it would be nice if the compiler reported it in a more helpful way.

like image 80
Bill Frasure Avatar answered Nov 04 '22 04:11

Bill Frasure