Pregunta

Normalmente, las verificaciones de Mockito azucarado de Specs2 se verifican y no pasan la prueba cuando corresponde.Sin embargo, en algunos casos se ignoran.

Normalmente, esta verificación de prueba falla como se esperaba, ya que myApp llamó a myService al menos una vez.

import org.specs2.mock.Mockito._

class MySpec extends Specification with Mockito {
  "MyApp" should {
     "blow up" in WithApplication {
         val myService = mock[MyService]
         val myApp = new MyApp(myService)

         myApp.doSomething          

         there was no(myService).doSomethingElse
     }
  }
}

(Nota Con aplicación es una obra de teatro!cosa marco)

Sin embargo, como he introducido rasgos de Cake Pattern en mis componentes, mis pruebas se ven así.

class MySpec extends Specification with Mockito {
  "MyApp" should {
     "blow up" in WithApplication with MockRegistry {

         val myApp = new MyApp(myService)

         myApp.doSomething          

         there was no(myService).doSomethingElse
     }
  }
}

donde MockRegistry se parece a esto

trait MockRegistry extends Mockito with MyServiceComponent {
  val myService = mock[MyService]
}

La prueba con patrón My Cake nunca falla en la verificación.Puedo cambiar esto a cualquier cosa y todos serán ignorados.

there was no(myService).doSomethingElse
there was one(myService).doSomethingElse
there was two(myService).doSomethingElse

Sin embargo, al reemplazar el paso simulado azucarado con una llamada directa a los métodos de Java, falla cuando es apropiado.

import org.mockito.Mockito._

verify(myService, times(1)).doSomethingElse

Entonces, parece que los rasgos involucrados en el método de prueba han confundido adecuadamente a Mockito.

¿Fue útil?

Solución

Eso es porque el Mockito extensión de MockRegistry No sabe que es necesario lanzar excepciones en caso de falla.Pero el Mockito en Specification lo hace porque Specification tiene el ThrownExpectations rasgo mezclado.

Entonces puedes eliminar el Mockito extensión de MockRegistry o agregar ThrownExpectations lo:

trait MockRegistry extends MyServiceComponent {
  val myService = mock(classOf[MyService])
}

// or
import org.specs2.matcher.ThrownExpectations

trait MockRegistry extends MyServiceComponent with ThrownExpectations {
  val myService = mock(classOf[MyService])  
}  

Otros consejos

y como se esperaba se debía a los rasgos.Estaba en la cara debida demasiados rasgos de Mockito ...

Mi especificación tuvo un rasgo de Mockito.El patrón de mi pastel se burló del registro de componentes también tenía un rasgo de Mockito.En el método de prueba, ambos fueron parte del objeto, lo que parece confundir las especaciones2 / Mockito.

Así que eliminando el azúcar Mockito de mi registro de componentes simulacros:

//import org.specs2.mock.Mockito._
import org.mockito.Mockito._

trait MockRegistry extends MyServiceComponent {
  val myService = mock(classOf[MyService])
}

y solo tienen el azúcar Mockito en la especificación, entonces mis verificaciones azucaradas comenzaron a funcionar como se espera nuevamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top