0

SBTを使用してテストを実行すると、コードのリビジョン5でエラーが発生します。

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

Interwebsで「クラスはアクセス可能な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ために保持する必要があります:clazzTDegree

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 に答える