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.

Cómo burlar/espiar una instancia de Jenkins utilizando Spock

Tengo este código en mi pipeline, ahora quiero agregar pruebas unitarias para él usando el framework de spock, el problema es cómo simular o espiar a Jenkins.instance y todos los métodos en cadena.

 String deployPipeline = "Deploy/${projectID}/deploy-to-prod"
 def lastRelease = Jenkins.instance.getItemByFullName(deployPipeline).getLastSuccessfulBuild()

String lastDeployedVersion = lastRelease.getBadgeActions().findResult {
    String text = it.getText()
    if (text != null && text.matches(/^Version\=/) != null) {
        return text.find(/\d+.\d+.\d+/)
    }
 }
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para burlar o espiar Jenkins.instance y todos los métodos de encadenamiento en el código, puedes usar el Marco de Burlado proporcionado por Spock.

    Primero, necesitas crear una instancia ficticia (Mock) de Jenkins:

    def jenkinsMock = Mock(Jenkins)
    

    Luego, puedes usar las características de Modificación y de Interacción incorporadas en Spock para definir el comportamiento de Jenkins.instance y sus métodos, y verificar que se llaman según lo esperado. Por ejemplo, para la modificación del método getItemByFullName para que devuelva una instancia de FreeStyleProject:

    jenkinsMock.getItemByFullName(_) >> new FreeStyleProject()
    

    Para probar el código, puedes reemplazar Jenkins.instance con jenkinsMock:

    String deployPipeline = "Deploy/${projectID}/deploy-to-prod"
    def lastRelease = jenkinsMock.getItemByFullName(deployPipeline).getLastSuccessfulBuild()
    
    String lastDeployedVersion = lastRelease.getBadgeActions().findResult {
        String text = it.getText()
        if (text != null && text.matches(/^Version\=/) != null) {
            return text.find(/\d+\.\d+\.\d+/)
        }
    }
    
    assert lastDeployedVersion == "1.2.3" // Reemplazar con el resultado esperado
    

    De esta manera, puedes probar el código sin ejecutarlo realmente en una instancia de Jenkins. En su lugar, puedes definir el comportamiento de Jenkins.instance y sus métodos en la prueba unitaria utilizando el Marco de Burlado de Spock.

Comments are closed.