¿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, 4 meses, 29 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 el Matchers 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 es trait 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