Pregunta

¿Cómo refactorizar para eliminar la duplicación de código en esta especificación:

describe 'TestPlugins'
    describe '.MovieScanner(document)'
        before_each
            MoviePage_loggedIn = fixture("movie_logged_in.html")                // Get logged-in movie page
            MoviePage_notloggedIn = fixture("movie_not_logged_in.html")     // Get non logged-in movie page
            scanner = new MovieScanner()                                                // Get movie scanner
        end

        it 'should scan logged-in movie page for movie data'
            doc = MoviePage_loggedIn            // Get document to scan

            // Unit Tests
            // ------------------------------------------------------------

            // Test movie scanner's functions
            scanner.getMovieTitle(doc).should.eql "The Jacket"
            scanner.getMovieYear(doc).should.eql "2005"

            // Test movie scanner's main scan function
            scannedData = scanner.scan(doc)
            scannedData.title.should.eql "The Jacket"
            scannedData.year.should.eql "2005"
        end

        it 'should scan non logged-in movie page for movie data'
            doc = MoviePage_notloggedIn     // Get document to scan

            // Unit Tests
            // ------------------------------------------------------------

            // Test movie scanner's functions
            scanner.getMovieTitle(doc).should.eql "The Jacket"
            scanner.getMovieYear(doc).should.eql "2005"

            // Test movie scanner's main scan function
            scannedData = scanner.scan(doc)
            scannedData.title.should.eql "The Jacket"
            scannedData.year.should.eql "2005"
        end
    end
end
¿Fue útil?

Solución

En el TDC, queremos describir el comportamiento de nuestra aplicación o clases para que sean fáciles de cambiar. Si la eliminación de la duplicación también oscurecer el comportamiento, no quite la duplicación. El código se lee 10 veces más de lo que está escrito, y aún más IME para BDD escenarios y ejemplos a nivel de unidad.

Si usted decide quitar la duplicación de todos modos, reemplazarlo con algo legible. No estoy familiarizado con JSpec pero me esperaba algo así

scannedData.shouldMatch "The Jacket", "2005"

donde se comprueban todos los resultados pertinentes para el título y el año.

Para eliminar la duplicación irrelevante de si se ha identificado o no:

separar el código en Givens (contexto en el que no importa cómo llegó allí), Whens (eventos a través de la aplicación cuyo comportamiento que realmente quiere prueba) y thens (resultados que usted está buscando). Usted está mirando para describir las capacidades del sistema y las cosas un usuario puede hacer con él, en lugar de si se trata de una página web o una ventana - No debería importar. Retener las llamadas de bajo nivel a un nivel inferior.

A continuación, puede tener dos diferentes Givens - conectado o no conectado -. Y reutilizar los otros pasos para el resto

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top