Scalamock é a biblioteca de mocking número um para Scala. Ele pode criar simulações de duas maneiras:
- com macros Scala
- com proxies Java
Ambos os métodos não são perfeitos e geralmente você deseja usar simulações de macro com fallback para proxy às vezes.
Embora a biblioteca não tenha sido projetada com esse caso de uso em mente, achei fácil combinar os dois modelos.
import org.scalamock.scalatest.AbstractMockFactory
import org.scalamock.proxy.ProxyMockFactory
import org.scalatest.Suite
import scala.reflect.ClassTag
trait MixedMockFactory extends AbstractMockFactory {
this: Suite =>
object Proxy extends ProxyMockFactory {
import org.scalamock.proxy._
def mock[T: ClassTag]: T with Mock = super.mock[T]
def stub[T: ClassTag]: T with Stub = super.stub[T]
}
}
Usar
class SomeSpec extends WordSpec with MixedMockFactory {
val macroMock = mock[Service1]
val proxyMock = Proxy.mock[Service2]
}