typestar

Simular una dependencia en Go

Depende de una interfaz y la prueba aporta su propia implementación.

type Store interface {
    Save(lang string, tpm int) error
}

func Record(store Store, lang string, tpm int) error {
    if tpm <= 0 {
        return errors.New("tpm must be positive")
    }
    return store.Save(lang, tpm)
}

type fakeStore struct {
    calls []string
    err   error
}

func (f *fakeStore) Save(lang string, tpm int) error {
    f.calls = append(f.calls, fmt.Sprintf("%s=%d", lang, tpm))
    return f.err
}

func TestRecord(t *testing.T) {
    fake := &fakeStore{}
    if err := Record(fake, "go", 104); err != nil {
        t.Fatalf("unexpected error: %v", err)
    }
    if len(fake.calls) != 1 || fake.calls[0] != "go=104" {
        t.Errorf("calls = %v", fake.calls)
    }
}

Cómo funciona

  1. El código de producción jamás menciona el fake.
  2. Una interfaz pequeña es más fácil de simular que una grande.
  3. Registrar las llamadas en el fake es como asertas sobre ellas.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
30
Caracteres a escribir
622
Tokens
176
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 101 segundos.

Escribe este fragmento

Paso 1 de 3 en Fakes y fixtures; paso 5 de 13 en Pruebas.

← Anterior Siguiente →