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