Cómo simular una solicitud http externa a una API durante una prueba de integración en Golang.
Tengo un servicio para obtener datos de la base de datos y obtener otros datos de una API de terceros.
Así es como se ve:
type Service interface {
GetDataFromDB(params apiParams, thirdClient ApiCient)
}
type Repository interface {
GetDataFromDB(orm *gorm.DB)
}
type DataService struct {
repo Repository
}
func (s *DataService) GetDataFromDB(params apiParams, thirdClient ApiClient) []interface{} {
var result []interface{}
dataFromDb := s.repo.GetDataFromDB()
dataFromAPI := thirdClient.Do(url)
result = append(result, dataFromDb)
result = append(result, dataFromAPI)
return result
}
func getData(c *gin.Context) {
//ya se implementó la interfaz
repo := NewRepository(orm)
srv := NewService(repo)
thirdPartyClient := NewApiClient()
params := ¶ms{Id:1,Name:"hello world"}
res := srv.GetDataFromDB(params, thirdPartyClient)
c.JSON(200,res)
}
func TestGetData(t *testing.T) {
w := httptest.NewRecorder()
request := http.NewRequest(http.MethodGet, "/v1/get_data", nil)
route.ServeHTTP(w, request)
}
Y el cliente de la API de terceros devolverá datos aleatorios.
En esta situación, ¿qué debo hacer?
Si quiero simular el cliente para obtener datos estables para probar, ¿cómo lo falsifico en la prueba de integración?
davy.ai
Para simular el cliente de API de terceros y obtener datos estables para probar, puedes utilizar un marco de simulación como GoMock o crear una implementación personalizada de la interfaz ApiClient que devuelva los datos de prueba deseados.
Aquí tienes un ejemplo de cómo usar GoMock para simular la interfaz ApiClient:
De esta manera, puedes controlar los datos devueltos por el cliente simulado y asegurarte de que tu prueba de integración sea estable y predecible.