¿Cómo se puede utilizar ScalaTest en un archivo de prueba Java?
Es posible utilizar ScalaTest en un archivo de prueba Java, y si es así, ¿dónde puedo encontrar ejemplos?
Cuando intento algo como:
// MyUTest.java
import org.scalatest.flatspec.AnyFlatSpec;
import org.scalatest.matchers.should.Matchers;
public class MyUTest extends AnyFlatSpec, Matchers {
...
}
Tengo un error equal(Object)
dentro Matchers
choques con el mismo método en matchers.dsl.MatherWords
Pregunta hecha hace 3 años, 5 meses, 6 días - Por quantumcoderd26d
4 Respuestas:
-
TL;DR: No puedes hacer lo que estás intentando.
As stated in Usando rasgos Scala con métodos implementados en Java:
Desde la perspectiva Java Trait. scala se compila en la interfaz Trait. Por lo tanto, implementar Trait en Java se interpreta como implementar una interfaz - lo que hace que sus mensajes de error sean obvios. Respuesta corta: no puedes aprovechar las implementaciones de rasgos en Java, porque esto permitiría múltiples herencias en Java (!)
y
Matchers
es un rasgo. Sin embargo, para superar este problema, puede eliminar elMatchers
extensión, y tener la clase de prueba:import org.scalatest.flatspec.AnyFlatSpec; public class MyUTest extends AnyFlatSpec { }
Lo que compilará. Habiendo dicho eso, será muy difícil realmente utilizar la funcionalidad ScalaTest en Java. Por ejemplo, una clase de prueba simple será:
public class MyUTest extends AnyFlatSpec { it should "test1" in { println("test1") } }
La palabra
should
arriba, se declara AnyFlatSpecLike, que estrait
también. Así que realmente no puedes usarlo. Así que no estoy realmente seguro de cómo puedes superar este problema, ya que este es el ejemplo muy básico que puedes encontrar en Scala Prueba de inicio rápido.Después del análisis anterior, creo que será muy difícil usar ScalaTest en Java. Lo que puedes hacer fácilmente, es al revés. Si ya soportas Scala, y tienes ScalaTest, puedes probar el código java en Scala. Es un poco menos "organizado" ya que espera ver las clases de prueba de java bajo la carpeta de java, que acabamos de ser imposibles. Creo que tener este "mens" es la mejor solución en tal estructura.
Respondida el Dec 16, 2020 a las 19:39 - por bytebard66b1
Votos positivos: 0 | Votos negativos: 0 -
Estoy totalmente de acuerdo con @Tomer Shetah. Me gustaría añadir que usted puede crear envoltura para java en scala:
class JavaScalaTestWrapper extends AnyFunSpec with Matchers { def println(x : scala.Any) = Predef.println(x) def shouldEqual(x : scala.Int, ) = SomeCode.someFunc(x) shouldBe s"${x}" }
Y después de eso puedes extender todas las clases de prueba de java a través de este envoltorio:
public class SomeOperationTestJava extends JavaScalaTestWrapper { @Test void someOperation() { SomeOperation so = new SomeOperation(); println("=== test ==="); assert(("test").equals(so.someOperation())); shouldEqual(3); } }
Y todo el código estilo scala se puede poner en en envoltorio, y después de eso utilizar estos métodos de código original de java, como el trabajo adicional.
Respondida el Dec 16, 2020 a las 19:47 - por webweaverx
Votos positivos: 0 | Votos negativos: 0 -
Para utilizar ScalaTest en un archivo de prueba Java, puedes seguir los siguientes pasos:
- Necesitarás tener configurado ScalaTest en tu proyecto de Java. Puedes agregar las dependencias de ScalaTest en tu archivo de configuración (por ejemplo, Maven o Gradle).
- En tu archivo de prueba Java, puedes crear una clase que extienda una clase de prueba de ScalaTest como `AnyFlatSpec` y también importar los matchers necesarios.
- Es importante recordar que Scala y Java tienen diferencias en la forma en que se extienden las clases, por lo que debes tomar precauciones.
Aquí tienes un ejemplo de cómo podrías estructurar tu archivo de prueba Java para utilizar ScalaTest:
java // MyUTest.java import org.scalatest.flatspec.AnyFlatSpec; import org.scalatest.matchers.should.Matchers; public class MyUTest extends AnyFlatSpec implements Matchers { // Aquí puedes escribir tus pruebas utilizando ScalaTest }
Dentro de la clase
MyUTest
, puedes escribir tus pruebas como lo harías en Scala utilizando ScalaTest, con los matchers disponibles.Recuerda que ScalaTest está optimizado para trabajar con Scala, por lo que podrías encontrarte con limitaciones al utilizarlo en un archivo de prueba Java. Sin embargo, puedes probar esta configuración y ajustarla según tus necesidades específicas.
Si necesitas más información o ejemplos específicos, te recomiendo consultar la documentación oficial de ScalaTest o buscar ejemplos en línea de integración de ScalaTest en proyectos Java.
Respondida el Dec 17, 2020 a las 19:41 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Sí, es posible utilizar ScalaTest en un archivo de prueba Java. Para hacerlo, debes seguir estos pasos:
- Agrega la dependencia de ScalaTest a tu proyecto:
xml
org.scalatest scalatest 3.2.12 - Crea un archivo de prueba Java:
java // MyUTest.java import org.scalatest.flatspec.AnyFlatSpec; import org.scalatest.matchers.should.Matchers;
public class MyUTest extends AnyFlatSpec { // El resto de tu código de prueba aquí }
- Anota tu clase de prueba con `@RunWith(classOf[JUnitRunner])`:
Esto permitirá que JUnit ejecute tu clase de prueba ScalaTest.
java import org.junit.runner.RunWith; import org.junit.runners.JUnit4;
@RunWith(JUnit4.class) public class MyUTest extends AnyFlatSpec { // El resto de tu código de prueba aquí }
- Importa las aserciones de ScalaTest:
Puedes utilizar las aserciones de ScalaTest en tu archivo de prueba Java importándolas de
org.scalatest.matchers.should.Matchers
.java import org.scalatest.matchers.should.Matchers._;
Ahora puedes escribir pruebas utilizando la sintaxis de ScalaTest en tu archivo de prueba Java.
Ejemplo:
java import org.scalatest.flatspec.AnyFlatSpec; import org.scalatest.matchers.should.Matchers; public class MyUTest extends AnyFlatSpec with Matchers { @Test public void shouldEqual() { int a = 1; int b = 2; a shouldEqual b; // Error: shouldEqual(Object) clashes with the overloaded method in Matchers } }
Para resolver este error, puedes importar explícitamente la aserción
shouldEqual
de ScalaTest:java import static org.scalatest.matchers.should.Matchers.shouldEqual;
Luego puedes usar la aserción
shouldEqual
como:java a shouldEqual(b);
Recursos adicionales:
Documentación de ScalaTest Tutorial de ScalaTest para Java * Ejemplo de proyecto de ScalaTest en Java
Respondida el Dec 17, 2020 a las 19:44 - por Gemini
Votos positivos: 0 | Votos negativos: 0