Capítulo 0: Introducción y configuración

Un código impecable es fundamental para el éxito.

Ron Jeffries, "Código limpio: Un aprendizaje", 23 de agosto de 2017, ronjeffries.com

Antes de iniciar nuestro viaje por el exigente y gratificante mundo del desarrollo basado en pruebas, tenemos que asegurarnos de que disponemos de un entorno de desarrollo operativo. Este capítulo trata sobre la preparación y la configuración.

Configurar tu entorno de desarrollo

Independientemente del camino de lectura que sigas (ver Figura P-2), necesitas un entorno de desarrollo limpio para seguir este libro. El resto del libro asume que has configurado el entorno de desarrollo como se describe en esta sección.

Importante

Independientemente de Go, JavaScript o Python con el que empieces, configura tu entorno de desarrollo como se describe en esta sección.

Configuración común

Estructura de carpetas

Crea una carpeta que será la raíz de todo el código fuente que escribiremos en este libro. Ponle un nombre que te resulte claro e inequívoco dentro de unas semanas, por ejemplo, tdd-project.

En esta carpeta, crea un conjunto de carpetas como el siguiente

tdd-project
├── go
├── js
└── py

Crea todas estas carpetas antes de escribir la primera línea de código, incluso si piensas seguir este libro en varias pasadas, un lenguaje cada vez. Crear esta estructura de carpetas proporciona las siguientes ventajas:

  1. Mantiene el código en las tres lenguas separadas, pero muy próximas entre sí.

  2. Garantiza que la mayoría de los comandos de este libro funcionarán sin cambios.

    • Los comandos que tratan con nombres de archivo/carpeta totalmente cualificados son una excepción, y son raros. Uno de ellos se encuentra en esta sección.

  3. Permite adoptar fácilmente funciones avanzadas, como la integración continua, en los tres idiomas.

  4. Coincide con la estructura de carpetas del repositorio de código adjunto. Esto puede ser útil para comparar y contrastar tu código a medida que evoluciona.

En el resto de este libro, el término Raíz del Proyecto TDD se utiliza para referirse a la carpeta raíz que contiene todo el código fuente -nombrada anteriormente tdd-project. Las carpetas denominadas go, js, y py se denominan con estos mismos nombres; el significado queda claro por el contexto.

Importante

Raíz del Proyecto TDD es el nombre utilizado para referirse a la carpeta que contiene todo el código fuente desarrollado en este libro. Es el padre de tres carpetas llamadas go, js, y py.

Declara una variable de entorno llamada TDD_PROJECT_ROOT y establece su valor en el nombre completo de la carpeta raíz del proyecto TDD. Hacer esto una vez en cada shell (o mejor aún, una vez en tu script de inicialización del shell, como el archivo .bashrc ) garantiza que todos los comandos posteriores funcionen sin problemas.

export TDD_PROJECT_ROOT=/fully/qualified/path/to/tdd-project

Por ejemplo, en mi sistema macOS, la ruta completa del TDD_PROJECT_ROOT es /Users/saleemsiddiqui/code/github/saleem/tdd-project.

Editor de texto o IDE

Necesitaremos un editor de texto para editar los archivos fuente. Un entorno de desarrollo integrado(IDE) puede ayudarnos proporcionándonos una única herramienta dentro de la cual podamos editar, compilar y probar código en varios idiomas. Sin embargo, esto es una cuestión de elección y preferencia personal; elige lo que mejor se adapte a ti.

El Apéndice A describe las IDE con más detalle.

Concha

Necesitaremos una shell -un intérprete de línea de comandos- para ejecutar nuestras pruebas, examinar la salida y realizar otras tareas. Al igual que los IDE, las opciones de shell son muchas y a menudo son objeto de un exuberante intercambio de opiniones entre los desarrolladores. Este libro asume un intérprete de comandos tipo Bash para los comandos que hay que escribir. En la mayoría -si no en todos- los sistemas operativos tipo Unix (y en macOS), se dispone fácilmente de un intérprete de comandos tipo Bash.

Para Windows, están disponibles shells como Git BASH. En Windows 10, el Subsistema de Windows para Linux proporciona soporte nativo para el shell Bash, entre otras muchas "golosinas de Linux". Cualquiera de estas opciones, o algo similar, es suficiente (y necesario) para seguir los ejemplos de código de este libro.

La Figura 0-1 muestra un intérprete de comandos tipo Bash con los resultados de un comando tecleado en él.

An iTerm shell on a macOS operating system
Figura 0-1. Para seguir los ejemplos de codificación de este libro se necesita un intérprete de comandos tipo Bash, como el que se muestra aquí

Git

El Capítulo 13 introduce la práctica de la integración continua (IC) utilizando las Acciones de GitHub. Para seguir el contenido de ese capítulo, necesitamos crear un proyecto GitHub propio y empujar código a él.

Git es un sistema de control de versiones distribuido de código abierto. GitHub es una plataforma colaborativa de alojamiento en Internet que permite a las personas conservar y compartir entre sí el código fuente de sus proyectos.

Importante

Git es un sistema de control de versiones distribuido, gratuito y de código abierto. GitHub es una plataforma para compartir código que utiliza Git.

Para asegurarnos en de que podemos adoptar la integración continua, haremos algunos preparativos ahora y aplazaremos parte del trabajo hasta el Capítulo 13. En concreto, configuraremos el sistema de control de versiones Git en nuestro entorno de desarrollo. Pospondremos la creación de un proyecto GitHub hasta el Capítulo 13.

Primero, descarga e instala el sistema de control de versiones Git. Está disponible para macOS, Windows y Linux/Unix. Después de instalarlo, comprueba que funciona escribiendo git --version en una ventana de terminal y pulsando Intro. Deberías ver como respuesta la versión instalada de Git, como se muestra en la Figura 0-2.

Verify that Git is installed on a shell
Figura 0-2. Comprueba que Git está instalado escribiendo git --version y pulsando Intro en un intérprete de comandos

A continuación, crearemos un nuevo proyecto Git en nuestro TDD_PROJECT_ROOT. En una ventana shell, escribe los siguientes comandos:

cd $TDD_PROJECT_ROOT
git init .

Esto debería producir una salida que dijera Initialized empty Git repository in /your/fully/qualified/project/path/.git/. Esto crea un nuevo y brillante (y actualmente vacío) repositorio Git en nuestra carpeta TDD_PROJECT_ROOT. Ahora deberíamos tener estas carpetas bajo nuestra carpeta TDD-PROJECT-ROOT:

tdd-project
├── .git
├── go
├── js
└── py

La carpeta .git es utilizada por Git para llevar la contabilidad. No es necesario hacer ningún cambio en su contenido.

A medida que escribamos código fuente en los siguientes capítulos, confirmaremos periódicamente nuestros cambios en este repositorio Git. Utilizaremos la CLI (interfaz de línea de comandos) de Git para hacerlo.

Importante

En el resto de este libro, confirmaremos con frecuencia nuestros cambios de código en el repositorio Git. Para resaltarlo, utilizaremos el icono Git de Git.

Ve a

Necesitamos instalar la versión 1.17 de Go para seguir este libro. Esta versión se puede descargar para distintos sistemas operativos.

Para comprobar que Go está correctamente instalado, escribe go version en un intérprete de comandos y pulsa Intro. Esto debería imprimir el número de versión de tu instalación de Go. Véase la Figura 0-3.

Verify that Go is working on a shell
Figura 0-3. Comprueba que Go funciona escribiendo go version y pulsando Intro en un intérprete de comandos

También tenemos que establecer un par de variables de entorno específicas de Go:

  1. La variable de entorno GO111MODULE debe ajustarse a on.

  2. La variable de entorno GOPATH no debe incluir la carpeta TDD_PROJECT_ROOT ni ninguna carpeta situada debajo de ella, como la carpeta go.

Ejecuta estas dos líneas de código en el intérprete de comandos:

export GO111MODULE="on"
export GOPATH=""

Tenemos que crear un archivo go.mod básico para prepararnos para escribir código. Estos son los comandos para hacerlo:

cd $TDD_PROJECT_ROOT/go
go mod init tdd

Esto creará un archivo llamado go.mod cuyo contenido debería ser :

module tdd

go 1.17

Para todo el desarrollo de Go a partir de este punto, asegúrate de que el intérprete de comandos está en la carpeta go en TDD_PROJECT_ROOT.

Importante

Para el código Go de este libro, asegúrate de entrar primero en cd $TDD_PROJECT_ROOT/go antes de ejecutar cualquier comando Go.

Unas palabras sobre la gestión de paquetes Go

La gestión de paquetes de Go se encuentra en medio de un cambio sísmico. El estilo antiguo -que utilizaba la variable de entorno GOPATH - está siendo eliminado en favor del estilo más reciente, que utiliza un archivo go.mod. Ambos estilos son en gran medida incompatibles entre sí.

Las dos variables de entorno que definimos anteriormente, y el archivo go.mod que generamos, garantizan que las herramientas Go puedan funcionar correctamente con nuestro código fuente, especialmente cuando creamos paquetes. Crearemos paquetes Go en el Capítulo 5.

JavaScript

Necesitamos Node.js v14 ("Fermium") o v16 para seguir este libro. Ambas versiones están disponibles en el sitio web de Node. js para distintos sistemas operativos.

Para verificar que Node.js está correctamente instalado, escribe node -v en un intérprete de comandos y pulsa Intro. El comando debería imprimir un mensaje de una línea con la versión de Node.js. Ver Figura 0-4.

Verify that Node.js is working on a shell
Figura 0-4. Comprueba que Node.js funciona escribiendo node -v y pulsando Intro en un intérprete de comandos

Unas palabras sobre las bibliotecas de pruebas

Hay varios marcos de pruebas unitarias en el ecosistema Node.js. En general, son excelentes para escribir pruebas y hacer TDD. Sin embargo, este libro prescinde de todos ellos. Su código utiliza el paquete NPM assert para las aserciones, y una clase sencilla con métodos para organizar las pruebas. La simplicidad es para mantener nuestro enfoque en la práctica y la semántica de TDD en lugar de en la sintaxis de cualquier biblioteca. En el Capítulo 6 se describe con más detalle la organización de las pruebas. El Apéndice B enumera los marcos de pruebas y las razones detalladas para no utilizar ninguno de ellos.

Otra palabra rápida, sobre la gestión de paquetes JavaScript

Al igual que los marcos de pruebas, JavaScript tiene muchas formas de definir paquetes y dependencias. Este libro utiliza el estilo CommonJS. En el Capítulo 6, se tratan los demás estilos: los estilos ES6 y UMD se muestran en detalle con código fuente, y el estilo AMD más brevemente, sin código fuente.

Python

Necesitamos Python 3.10 para seguir este libro, que está disponible en el sitio web de Python para distintos sistemas operativos.

El lenguaje Python sufrió cambios significativos entre "Python 2" y "Python 3". Aunque una versión anterior de Python 3 (por ejemplo, 3.6) puede funcionar, cualquier versión de Python 2 será inadecuada para seguir este libro.

Es posible que ya tengas Python 2 instalado en tu ordenador. Por ejemplo, muchos sistemas operativos macOS (incluido Big Sur) vienen con Python 2. No es necesario (ni recomendable) desinstalar Python 2 para seguir este libro; sin embargo, es necesario asegurarse de que Python 3 es la versión que se utiliza.

Para evitar ambigüedades, en este libro se utiliza python3 explícitamente como nombre del ejecutable en los comandos. Es posible -aunque también innecesario- poner un "alias" al comando python para referirse a Python 3.

He aquí una forma sencilla de averiguar qué comando debes escribir para asegurarte de que se utiliza Python 3. Escribe python --version en un intérprete de comandos y pulsa Intro. Si obtienes algo que empieza por Python 3, estás en buena forma. Si obtienes algo como Python 2, puede que necesites escribir explícitamente python3 para todos los comandos de este libro.

La Figura 0-5 muestra un entorno de desarrollo con Python 2 y Python 3.

Verify that Python 3 is working on a shell
Figura 0-5. Comprueba que Python 3 está instalado y el comando que debes escribir para utilizarlo (python3 como se muestra aquí)
Importante

Utiliza Python 3 para seguir el código de este libro. No utilices Python 2, no funcionará.

La Figura 0-6 muestra un mnemotécnico para simplificar el lío anterior de la versión de Python.

For all the Python code in this book, remember this easy and cheesy rhyme! Python 2: boo! Python 3: glee!
Figura 0-6. ¡Simple mnemotecnia para aclarar qué versión de Python se necesita para este libro!

Dónde estamos

En este capítulo preliminar, nos familiarizamos con la cadena de herramientas que necesitaremos para empezar a escribir nuestro código de forma dirigida por pruebas. También aprendimos a preparar nuestro entorno de desarrollo y a verificar que está en condiciones de funcionar.

Ahora que sabemos de qué trata este libro, qué contiene, cómo leerlo y, lo que es más importante, cómo configurar nuestro entorno de trabajo para seguirlo, estamos listos para resolver nuestro problema, cincelando una característica cada vez, impulsados por las pruebas. Comenzaremos ese viaje en el Capítulo 1. ¡A rodar!

Get Aprender el desarrollo basado en pruebas now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.