Escalamock misto simulado

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]
}