es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

sbt cómo acceder al directorio base del proyecto en código Scala

Se me ha proporcionado un código que fue creado por un proveedor y parece que su ingeniero ha codificado mucho en las pruebas unitarias.
Tengo una prueba unitaria para una función que devuelve la ruta absoluta completa del informe generado como parte del código como una cadena.
actualmente, la prueba unitaria/afirmación que falla se ve así:

val reportPath = obj.getReportPath()
assert(reportPath.equals("file:/Users/khalid.mahmood/ReportingModule/target/report.csv"))

donde ReportingModule es el nombre del proyecto.

La lógica del código está bien, ya que para mí el valor de la variable reportPath es:

file:/Users/vikas.saxena/coding_dir/ReportingModule/target/report.csv

Dado que tengo el proyecto clonado en un subdirectorio llamado coding_dir en mi directorio principal, la lógica me parece correcta.

Quiero modificar la afirmación para asegurarme de que el código recoja el directorio base del proyecto por sí mismo y, al buscar en Internet, encontré que sbt tiene base como el equivalente de project.baseDir (de maven) en este enlace: link

Sin embargo, los siguientes cambios de código no me han funcionado:

assert(reportPath.equals("""$base""" + "/target/report.csv"))

¿Puedo obtener algunos consejos sobre cómo hacer esto correctamente?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando modificar la afirmación en la prueba unitaria para usar el directorio base del proyecto en lugar de codificar el camino.

    Según el enlace que proporcionaste, puedes usar la clave base de sbt para obtener el directorio base del proyecto. Sin embargo, parece que estás teniendo problemas para usarlo en la afirmación.

    Un problema con el fragmento de código actual es que se está usando incorrectamente la sintaxis de interpolación de cadenas (s""). Para usar la clave base en la afirmación, puedes intentar lo siguiente:

    import sbt._
    
    val reportPath = obj.getReportPath()
    val expectedPath = (baseDirectory in ThisBuild).value / "target/report.csv"
    assert(reportPath == expectedPath.toString)
    

    En este código, estamos usando el ajuste baseDirectory de sbt para obtener el directorio base del proyecto, y luego construimos el camino esperado añadiendo /target/report.csv. Convertimos este camino en una cadena usando .toString(), y luego lo comparamos con el reportPath real.

    Esto asegurará que la afirmación esté utilizando el camino correcto y no esté codificado de forma fija.

Comments are closed.