5

BDD 機能があるため、現在の maven/Java プロジェクトで scala 単体テストを使用したいと考えています。ただし、一部のモデル クラスには、Edit.save() などの静的な CRUDE メソッドがあります。Scala で内部静的メソッドへの暗黙的な呼び出しをモックできる手法はありますか?

通常の Java テストでは、これは PowerMock アノテーションを使用して簡単に実行できます。私の質問は、任意の scala テスト フレームワーク (ScalaTest、Specs2) を使用して同じことを行う方法です。

私はScalaMockがそれを助けることができることを学びましたが、' GeneratedMockFactory ' 特性は Maven の依存関係 (以下にリストされています) には存在しません。SBT プロジェクトでのみ動作するようです。

私のscalaテストライブラリ:

    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.10.0</version>
    </dependency>
    <dependency>
        <groupId>org.scalatest</groupId>
        <artifactId>scalatest_2.10</artifactId>
        <version>2.0.M5b</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.scalamock</groupId>
        <artifactId>scalamock-scalatest-support_2.10</artifactId>
        <version>3.0.1</version>
    </dependency>        

これは、私のscalaテストが今日どのように見えるかです:

package com.foo.edit

import org.scalatest._
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
import com.foo.models.Edit

@RunWith(classOf[JUnitRunner]) // This line binds the test with maven-surefire runner
class EditSpec extends FlatSpec with ShouldMatchers {

  "Edit" should "update name and website" in {
    val document = new util.HashMap[String, String]() {
      put("name", "A Name")
      put("website", "www.domain.com")
    }

    // This is the test subject, it's a Java class
    val edit = new Edit().modifiers(new util.HashMap[String, String]() {
      put("name", "Another Name")
      put("website", "http://site.org")
    });

    val result = edit.merge(document); // Here it calls Edit.save(document)
                                       // Want to stub this.

    assert(result.get("name") === "Another Name");
    assert(result.get("website") === "http://site.org");
  }
}
4

0 に答える 0