0

使用 SBT 运行测试时,我的代码的修订版 5 出现错误:

https://www.assembla.com/code/opyate-scala-graph-fork-sbt/subversion/changesets/5

我在互联网上搜索了“类不是可访问的 org.scalatest.Suite”,但只在 scalatest 框架代码中获得了该消息的结果

请帮助我找出问题所在,以及它是依赖版本问题、兼容性问题还是测试编码不正确。


细节是(一个例子):

套房

@RunWith(classOf[JUnitRunner])
class TDegreeRootTest
  extends Suites(
      new TDegree[immutable.Graph](immutable.Graph),
      new TDegree[  mutable.Graph](  mutable.Graph))
  with ShouldMatchers
{
}

测试班

class TDegree[+CC[N,E[X] <: EdgeLikeIn[X]] <: Graph[N,E] with GraphLike[N,E,CC[N,E]]]
    (val factory: GraphCompanion[CC])
    extends Suite
    with    ShouldMatchers
{ ... }

例外

[error] Could not run test scalax.collection.TDegree:
  java.lang.IllegalArgumentException:
    Class is not an accessible org.scalatest.Suite:
      scalax.collection.TDegree

引发异常的ScalaTest代码

true对于clazzmy 的实例,需要保留以下内容TDegree

classOf[Suite].isAssignableFrom(clazz) &&
    Modifier.isPublic(clazz.getModifiers) &&
    !Modifier.isAbstract(clazz.getModifiers) &&
    Modifier.isPublic(clazz.getConstructor(emptyClassArray: _*).getModifiers)

它需要一个无参数的构造函数,而我没有。

我想现在的问题变成了“如果我的类没有非参数构造函数,我如何让我的测试类与 ScalaTest 一起运行?”。

4

1 回答 1

1

这意味着 sbt 正在发现一个非可访问套件的类并将其交给 ScalaTest。这可能意味着它是包访问。如果它是公共的,请确保它有一个公共的无参数构造函数。我会快速查看差异,看看我是否能看到罪魁祸首。

于 2011-07-14T20:02:28.383 回答