Ao testar múltiplas funções com assinaturas e valores de retorno semelhantes, é entediante escrever testes individuais para cada função. No Go, a reflexão pode fornecer uma solução para testar essas funções coletivamente.
Considere um conjunto de funções (Func1, Func2, ...) com a seguinte assinatura:
func YourFunction() (int, error)
Objetivo: Escreva um teste que itere por esse conjunto de funções, chame cada uma e teste seus valores de retorno para condições específicas.
A reflexão nos permite acessar e manipular valores e funções em tempo de execução. Ao criar um objeto reflect.Value para o receptor, podemos encontrar a função correspondente e chamá-la usando reflect.Value.MethodByName. O valor retornado pode então ser examinado quanto à correção.
Aqui está um exemplo de teste que utiliza reflexão para testar todas as funções com a interface especificada:
func TestFunc(t *testing.T) {
var funcNames = []string{"Func1", "Func2", "Func3"}
stype := reflect.ValueOf(s) // receiver
for _, fname := range funcNames {
sfunc := stype.MethodByName(fname)
ret := sfunc.Call([]reflect.Value{})
val := ret[0].Int()
err := ret[1]
if val Tratamento de exceções com reflexão
Tenha em mente que chamar uma função inexistente usando reflexão causará pânico. Para lidar com isso, podemos usar funções adiadas e recuperação para capturar o pânico e fornecer mensagens de erro mais informativas.
Conclusão
Ao utilizar reflexão e lidar com exceções de maneira adequada, podemos criar um único teste que testa com eficiência múltiplas funções com comportamento semelhante, reduzindo a necessidade de código de teste repetitivo e garantindo a robustez de nossos testes.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3