Estoy intentando incorporar ScalaTest en mi proyecto Java; reemplazando todas las pruebas JUnit con ScalaTests. En un momento, quiero comprobar si el inyector de Guice inyecta el tipo correcto. En Java, tengo una prueba como esta:
public class InjectorBehaviour {
@Test
public void shouldInjectCorrectTypes() {
Injector injector = Guice.createInjector(new ModuleImpl());
House house = injector.getInstance(House.class);
assertTrue(house.door() instanceof WoodenDoor);
assertTrue(house.window() instanceof BambooWindow);
assertTrue(house.roof() instanceof SlateRoof);
}
}
Pero tengo un problema para hacer lo mismo con ScalaTest:
class InjectorSpec extends Spec {
describe("An injector") {
it("should inject the correct types") {
val injector = Guice.createInjector(new ModuleImpl)
val house = injector.getInstance(classOf[House])
assert(house.door instanceof WoodenDoor)
assert(house.window instanceof BambooWindow)
assert(house.roof instanceof SlateRoof)
}
}
}
Se queja de que el valor instanceof
no es miembro de Door
/ Window
/ Roof
. ¿No puedo usar instanceof
esa forma en Scala?
isInstanceOf[TraitName]
.Con Scalatest 2.2.x (tal vez incluso antes) puede usar:
fuente
a[Type]
para que puedas ser gramaticalmente correcto;)tiger shouldBe a [Tiger]
es la sintaxis actual scalatest.org/at_a_glance/FlatSpecmustBe
también es correcto, si usa doc.scalatest.org/3.0.1/#org.scalatest.MustMatchers que desea para FreeSpec.Si desea ser menos JUnit-esque y si desea utilizar los comparadores de ScalaTest, puede escribir su propio comparador de propiedades que coincida con el tipo (borrado de tipo de barra).
Encontré este hilo bastante útil: http://groups.google.com/group/scalatest-users/browse_thread/thread/52b75133a5c70786/1440504527566dea?#1440504527566dea
Luego puede escribir afirmaciones como:
en vez de
fuente
Las respuestas actuales sobre isInstanceOf [Type] y junit advice son buenas, pero quiero agregar una cosa (para las personas que llegaron a esta página en una capacidad no relacionada con junit). En muchos casos, la coincidencia de patrones de Scala se adaptará a sus necesidades. Lo recomendaría en esos casos porque te da el encasillado gratis y deja menos margen de error.
Ejemplo:
fuente
inside(foo)
lugar de `foo match). Ver scalatest.org/user_guide/using_matchers#matchingAPatternConsolidar la referencia de discusión ScalaTest de Guillaume (y otra discusión vinculada por James Moore) en dos métodos, actualizados para ScalaTest 2.xy Scala 2.10 (para usar ClassTag en lugar de manifiesto):
fuente
Utilizo 2.11.8 para hacer la aserción con colecciones. La sintaxis más nueva es la siguiente:
fuente
Map
parámetros del tipo. Lo que escribiste es lo mismo que escribirscores shouldBe a[Map[_, _]]
. Esto se menciona aquí: scalatest.org/user_guide/using_matchers#checkingAnObjectsClass