Como escrever testes automatizados em GO

Função 내보내기



Pra começar precisamos definir as funções que queremos exportar como publicas, o GO thinka funções publicas todas as funções que começam com a letra maiúscula, e thinka como privada todas as funções que começam com a letra minúscula

Criando o teste



No GO é convencionado que todos os arquivos de teste terminem com_test além disso o GO não precisa de uma lib externa como por exemplojest no javascript para fazer os testes, ele já vem com a ferramenta de testes por padrão. Porem para facilitar na hora de fazer as comparações de resultados precisamos instalar a lib testify com o seguinte comando

go get github.com/stretchr/testify/require


Para o caso do teste vamos testar a função Enable que pertence astruct 제품

type Product struct {
    ID     string
    Name   string
    Price  float64
    Status string
}

func (p *Product) Enable() error {
    if p.Price > 0 {
        p.Status = ENABLED
        return nil
    }
    return errors.New("Price must be greater than 0")
}


A struct no go funciona semelhante a uma classe em linguagens orientadas a objetos, onde declaramos a struct com todos as valores que ela precisa, e associamos metodos a ela

E para criar o teste em sí vamos criar o arquivo product_test.go onde o package dele vai ser o mesmo package do arquivo original mas com um test no final e ai vamos declarar a função como
`Test{구조체 이름}{메토도 이름} (t *testing.T)`

func TestProduct_Enable(t *testing.T) {
    product := application.Product{}
    product.Name = "Hello"
    product.Status = application.DISABLED
    product.Price = 10

    err := product.Enable()
    require.Nil(t, err)

    product.Price = 0
    err = product.Enable()
    require.Equal(t, "Price must be greater than 0", err.Error())
}


o primeiro는 queremos garantir que não deu erro e no segundo queremos ver se deu erro가 필요합니다. Podemos fazer ambos os testes na mesma função

보너스: Validando campos



Nesse mesmo projeto utili a lib asaskevich/govalidator para validar se os campos estão vindo como eu espero no Product.

essa lib da seguinte forma 활용

go get github.com/asaskevich/govalidator



func init() {
    govalidator.SetFieldsRequiredByDefault(true)
}


e na Struct onde defino os campos de Product ao lado coloquei as tags

type Product struct {
    ID     string  `valid:"uuidv4"`
    Name   string  `valid:"required"`
    Price  float64 `valid:"float,optional"`
    Status string  `valid:"required"`
}


para validar se o id é uuidv4 se veio o nome e o status e se o preço é float

좋은 웹페이지 즐겨찾기