Prueba de idioma TDD of go

1. Comprensión de TDD

Definición de TDD

TDD es un desarrollo impulsado por pruebas ( desarrollo impulsado por pruebas) del título, es un núcleo de prácticas y tecnologías de desarrollo ágil, pero también una metodología de diseño. El principio de TDD es escribir código de caso de prueba unitario antes de desarrollar código funcional, y el código de prueba determina qué código de producto debe escribirse. Aunque TDD es la práctica central de los métodos ágiles, no solo es aplicable a XP (Programación extrema), sino que también es aplicable a otros métodos y procesos de desarrollo.
La idea básica de TDD es promover todo el desarrollo a través de pruebas, pero el desarrollo impulsado por pruebas no es solo un trabajo de prueba simple, sino un proceso de cuantificación de análisis de requisitos, diseño y control de calidad. El diagrama de flujo básico es el siguiente:
Inserte la descripción de la imagen aquí


Completa el capítulo "Iteración" del tutorial basado en el ciclo TDD.

1. Escribiendo la prueba
En la prueba, probamos la función Repeat y esperamos devolver una cadena a través de la función Repeat, que contiene 5 parámetros de caracteres entrantes.
Escriba el código de prueba en el archivo iteration / repeat_test.go de la siguiente manera:

package iteration

import "testing"

func TestRepeat(t *testing.T) {
    
    
    repeated := Repeat("a")
    expected := "aaaaa"

    if repeated != expected {
    
    
        t.Errorf("expected '%q' but got '%q'", expected, repeated)
    }
}

2. Ejecute la prueba y obtenga el resultado del error.
Dado que la función Repetir no está definida, se informará un error cuando se ejecute la prueba. Los resultados de la prueba de ejecución son los siguientes:
Inserte la descripción de la imagen aquí
3. Escriba una implementación compilable y
siga estrictamente los pasos y principios del método TDD. Ahora solo haga que el código sea compilable. Para que pueda comprobar si el caso de prueba puede pasar.
Escriba el código en el archivo iteration / repeat.go de la siguiente manera:

package iteration

func Repeat(character string) string {
    
    
    return ""
}

4. Ejecute la prueba para obtener el resultado fallido
. La función Repetir se ha definido aquí, y luego el contenido específico en el código de prueba se puede ejecutar más, pero el resultado de la prueba en ejecución también será incorrecto. Esto se debe al problema de la definición de la función Repetir. Los resultados de la prueba en ejecución son los siguientes:
Inserte la descripción de la imagen aquí
5. Escribiendo la realización que puede pasar la prueba.
De acuerdo con los resultados de la prueba en ejecución del paso anterior y los requisitos del código de prueba, vuelva a escribir la función Repetir que cumpla con los requisitos de la prueba. Dado que el contenido específico del código de prueba ya se conoce, los requisitos se pueden aprobar en este paso. Escriba la función de repetición.
Vuelva a escribir el código en el archivo iteration / repeat.go de la siguiente manera:

package iteration

func Repeat(character string) string {
    
    
	var repeated string
	for i := 0; i < 5; i++ {
    
    
		repeated = repeated + character
	}
	return repeated
}

6. Ejecute la prueba para obtener un resultado exitoso.
La reescritura de la función Repetir satisface las necesidades del código de prueba, por lo que ejecutar la prueba obtendrá un resultado exitoso. Los resultados de la prueba en ejecución son los siguientes:
Inserte la descripción de la imagen aquí
7. Refactorización
Aunque el código en el archivo de código repeat.go ha pasado la prueba, todavía hay muchos problemas con la estandarización y la concisión del código, por lo que debemos refactorizar el código y refactorizar los requisitos del código. Simplifique el código tanto como sea posible sin cambiar la lógica y la función del código. El propósito de la simplificación es mejorar la legibilidad del código, acelerar la ejecución del código, etc. Un método de simplificación común es reutilizar el código (defina las variables, constantes y funciones de uso frecuente por separado, de modo que pueda llamar a estas variables, constantes y funciones en varios lugares). Refactorice repeat.go aquí de la siguiente manera:

package iteration

const repeatCount = 5

func Repeat(character string) string {
    
    
	var repeated string
	for i := 0; i < repeatCount; i++ {
    
    
		repeated += character
	}
	return repeated
}

Benchmarks (puntos de referencia)

Después de completar los ejemplos del capítulo "Iteración" basados ​​en el ciclo TDD, también puede escribir pruebas comparativas sobre esta base. Escribir puntos de referencia en Go es otra característica de primer nivel del lenguaje, que es muy similar a las pruebas de escritura en TDD.
Agregue el siguiente código de referencia sobre la base de iteration / reoeat_test.go:

func BenchmarkRepeat(b *testing.B) {
    
    
    for i := 0; i < b.N; i++ {
    
    
        Repeat("a")
    }
}

testing.B le da acceso a bN con nombre críptico. Cuando se está ejecutando el punto de referencia, el código se ejecuta bN veces y mide cuánto tiempo lleva. El número de ejecuciones de código no lo afectará, el marco de prueba elegirá el mejor valor que crea para que pueda obtener resultados más razonables.


Utilice go test -bench =. Para ejecutar la prueba de referencia. (Si usa go test -bench = "." En el entorno de Windows Powershell). Los resultados de la prueba son los siguientes:
Inserte la descripción de la imagen aquí

2. Completa los ejercicios del capítulo "Iteración" de este tutorial.

Modifique el código de prueba para que la persona que llama pueda especificar el número de repeticiones de caracteres y luego corrija el código.

Aquí se requiere que la función Repetir especifique el número de repeticiones de caracteres pasando un parámetro. Modificamos el código de prueba de la siguiente manera:

package iteration

import "testing"

func TestRepeat(t *testing.T) {
    
    
	repeated := Repeat("a", 6)
	expected := "aaaaaa"

	if repeated != expected {
    
    
		t.Errorf("expected %q but got %q", expected, repeated)
	}
}

Debido a que los parámetros de la función de repetición han cambiado, la ejecución de la prueba dará un resultado fallido. Los resultados de la prueba son los siguientes:
Inserte la descripción de la imagen aquí
Modifique el código principal para que la prueba pase, el código se modifica de la siguiente manera:

package iteration

//Repeat a string with 
func Repeat(character string, Readcount int) string {
    
    
	var repeated string
	for i := 0; i < Readcount; i++ {
    
    
		repeated += character
	}
	return repeated
}

Ejecutar la prueba en este momento obtendrá un resultado exitoso. Ejecute la prueba de la siguiente manera:

Inserte la descripción de la imagen aquí

Escribe un ExampleRepeat para mejorar la documentación de tu función

Para mejorar la documentación de la función, también necesitamos escribir una prueba de muestra. Agregue una función de prueba de ejemplo ExampleRepeat al archivo repeat_test.go. El código de función es el siguiente:

func ExampleRepeat() {
    
    
	str := Repeat("b", 10)
	fmt.Println(str)
	//Output: bbbbbbbbbb
}

Los resultados de la prueba en ejecución son los siguientes:
Inserte la descripción de la imagen aquí
Esto muestra que la función de prueba y la función de prueba de muestra se han ejecutado correctamente. Consulte la documentación de la función en este momento y descubra que la documentación de la función ya contiene una parte de prueba de muestra.
Inserte la descripción de la imagen aquí


Eche un vistazo al paquete de cuerdas. Encuentra funciones que creas que podrían ser útiles y escribe algunas pruebas para ellas

Verifique la documentación del paquete de cadenas, algunas funciones son las siguientes:

Inserte la descripción de la imagen aquí


Escriba y pruebe las funciones Compare y ToLower. El código de prueba se puede escribir simplemente de la siguiente manera:

package main

import (
	"fmt"
	"strings"
)

func main() {
    
    

	fmt.Println("compare:", strings.Compare("a", "b")) //Output: -1

	fmt.Println("tolower:", strings.ToLower("ABC")) // Output: abc
}

Los resultados de ejecutar el código de prueba son los siguientes:
Inserte la descripción de la imagen aquí

Tres, aplicación TDD: use el lenguaje para lograr un algoritmo de clasificación de burbujas

Algoritmo de clasificación de burbujas basado en la finalización del ciclo TDD

1. Escriba la prueba
Escriba el código de prueba en el archivo BubbleSort / BubbleSort_test.go de la siguiente manera:

package BubbleSort

import (
	"testing"
)

func TestBubbleSort(t *testing.T) {
    
    
	arr := [10]int{
    
    7, 6, 3, 9, 5, 0, 1, 4, 2, 8}
	sorted := BubbleSort(arr)
	expected := [10]int{
    
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

	for i := 0; i < 10; i++ {
    
    
		if sorted[i] != expected[i] {
    
    
			t.Errorf("expected %v but got %v", expected, sorted)
		}
	}
}

2. Ejecute la prueba y obtenga el resultado fallido.
Debido a que la función BubbleSortt no está definida, se informará un error cuando se ejecute la prueba en este momento. Los resultados de la prueba de ejecución son los siguientes:
Inserte la descripción de la imagen aquí

3. Escriba una implementación compilable.
Siga estrictamente los pasos y principios del método TDD. Ahora solo necesita hacer que el código sea compilable, para que pueda verificar si el caso de prueba puede pasar.
Escriba el código en el archivo BubbleSort / BubbleSort.go de la siguiente manera:

package BubbleSort

func BubbleSort(arr [10]int) [10]int {
    
    
	return arr
}

4. Ejecute la prueba y obtenga el resultado fallido
. La función BubbleSort se ha definido aquí, y luego el contenido específico en el código de prueba se puede ejecutar más, pero el resultado de la prueba en ejecución será incorrecto. Esto se debe al problema de definición de la función BubbleSort. Los resultados de la prueba son los siguientes:
Inserte la descripción de la imagen aquí

5. Escriba la realización que puede pasar la prueba.
De acuerdo con los resultados de la prueba en ejecución del paso anterior y los requisitos del código de prueba, vuelva a escribir la función BubbleSort que cumpla con los requisitos de la prueba. Dado que ya conoce el contenido específico del código de prueba, puede escribir la función BubbleSort de acuerdo con los requisitos de este paso.
Vuelva a escribir el código en el archivo BubbleSort / BubbleSort.go de la siguiente manera:

package BubbleSort

//BubbleSort sort a array
func BubbleSort(arr [10]int) [10]int {
    
    
	for i := 0; i < 9; i++ {
    
    
		for j := 0; j < 9-i; j++ {
    
    
			if arr[j] > arr[j+1] {
    
    
				temp := arr[j]
				arr[j] = arr[j+1]
				arr[j+1] = temp
			}
		}
	}
	return arr
}

6. Ejecute la prueba para obtener un resultado exitoso
Reescribir la función BubbleSort satisface las necesidades del código de prueba, por lo que ejecutar la prueba obtendrá un resultado exitoso. Los resultados de la prueba de ejecución son los siguientes:
Inserte la descripción de la imagen aquí
7. Refactorización
De acuerdo con el método mencionado anteriormente , la refactorización de BubbleSort.go es la siguiente:

package BubbleSort

const count = 10

//BubbleSort sort a array
func BubbleSort(arr [10]int) [10]int {
    
    
	for i := 0; i < count-1; i++ {
    
    
		for j := 0; j < count-1-i; j++ {
    
    
			if arr[j] > arr[j+1] {
    
    
				temp := arr[j]
				arr[j] = arr[j+1]
				arr[j+1] = temp
			}
		}
	}
	return arr
}

Benchmarks (puntos de referencia)

Agregue el siguiente código de referencia sobre la base de BubbleSort / BubbleSort.go:

func BenchmarkBubbleSort(b *testing.B) {
    
    
	for i := 0; i < b.N; i++ {
    
    
		arr := [10]int{
    
    7, 6, 3, 9, 5, 0, 1, 4, 2, 8}
		BubbleSort(arr)
	}
}

Utilice go test -bench =. Para ejecutar la prueba de referencia. (Si usa go test -bench = "." En el entorno de Windows Powershell). Los resultados de la prueba son los siguientes:
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_45960131/article/details/108721261
Recomendado
Clasificación