1

私は scalatest と scalamock を初めて使用しますが、いくつかのテストを作成することができました。ただし、テストで Futures を使用すると (結果を返すモックとクラス自体で)、テストに合格しないようです。

github でホストされている最小限の作業例を作成しました。"master" には先物が含まれ、"withNoFutures" には含まれません。

両方のブランチでテストを数回実行しましたが、「マスター」のテストは時々成功し、「withNoFutures」のテストは常に成功します。先物パスでテストを受けるのを手伝ってくれる人はいますか?

Github リポジトリ: https://github.com/vicaba/scalatestNotWorking/tree/master

失敗したテスト コードは次のようになります。

package example

import org.scalamock.scalatest.MockFactory
import org.scalatest.{BeforeAndAfter, FunSuite}

import scala.concurrent.Future


class SomeServiceTest extends FunSuite with BeforeAndAfter with MockFactory {

  var otherService: SomeOtherService = _

  var service: SomeService = _

  before {
    otherService = mock[SomeOtherService]
    service = mock[SomeService]
  }

  after {
    otherService = null
    service = null
  }

  test("a first test works") {
    otherService.execute _ expects() once()
    service.execute _ expects(*) returning Future.successful(true) once()
    SomeService.execute(service, otherService)
  }


  // Why this test does not work?
  test("a second test works") {
    // Copy paste the code in the first test
  }

}

ブール値のみを返すようにコードを変更すると (対応する実装クラスを変更すると)、すべて正常に動作します。それ以外の場合、結果は非決定的です

4

1 に答える 1