Как я могу сделать тестирование снимка? - PullRequest
0 голосов
/ 30 октября 2019

Поддерживает ли тестирование пакет поддержки тестирования снимков?

Вот мой случай:

package main

import (
  "bytes"
  "fmt"
  "html/template"
)

func main() {
  query := `
    INSERT INTO "ADGROUP_PERFORMANCE_REPORT" (
      {{.columnPrefix}}_adgroup_id, 
      {{.columnPrefix}}_adgroup_nme, 
      {{.columnPrefix}}_adgroup_status, 
      {{.columnPrefix}}_campaign_id, 
      {{.columnPrefix}}_campaign_nme, 
      {{.columnPrefix}}_campaign_status, 
      {{.columnPrefix}}_clicks, 
      {{.columnPrefix}}_impressions, 
      {{.columnPrefix}}_ctr, 
      {{.columnPrefix}}_average_cpc, 
      {{.columnPrefix}}_cost, 
      {{.columnPrefix}}_conversions, 
      {{.columnPrefix}}_average_position, 
      {{.columnPrefix}}_device, 
      google_adwords_client_customer_id
    ) VALUES
  `
  vars := make(map[string]interface{})
  vars["columnPrefix"] = "adgroup_performance_report"
  result := processString(query, vars)
  fmt.Printf("result=%s\n", result)
}

func process(t *template.Template, vars interface{}) string {
  var tmplBytes bytes.Buffer
  err := t.Execute(&tmplBytes, vars)
  if err != nil {
    panic(err)
  }
  return tmplBytes.String()
}

func processString(str string, vars interface{}) string {
  tmpl, err := template.New("tmpl").Parse(str)
  if err != nil {
    panic(err)
  }
  return process(tmpl, vars)
}

Теперь я собираюсь написать для него модульный тест, я хотел быиспользуйте тестирование снимков, чтобы проверить структуру строки запроса SQL, обработанной html/template pkg.

Вот вывод в stdout:

result=
    INSERT INTO "ADGROUP_PERFORMANCE_REPORT" (
      adgroup_performance_report_adgroup_id, 
      adgroup_performance_report_adgroup_nme, 
      adgroup_performance_report_adgroup_status, 
      adgroup_performance_report_campaign_id, 
      adgroup_performance_report_campaign_nme, 
      adgroup_performance_report_campaign_status, 
      adgroup_performance_report_clicks, 
      adgroup_performance_report_impressions, 
      adgroup_performance_report_ctr, 
      adgroup_performance_report_average_cpc, 
      adgroup_performance_report_cost, 
      adgroup_performance_report_conversions, 
      adgroup_performance_report_average_position, 
      adgroup_performance_report_device, 
      google_adwords_client_customer_id
    ) VALUES

Я не хочу писать этоОжидаемое значение дублируется в файле модульного теста и утверждается. Я предпочитаю использовать тестирование снимков, и оно создаст файл снимка. Что-то вроде jestjs snapshot-testing

1 Ответ

2 голосов
/ 30 октября 2019

Насколько я знаю, пакет testing не поддерживает что-то подобное из коробки. Существует шаблон для Go, который вы можете использовать под названием «Тестирование золотого файла». Соглашение заключается в том, чтобы хранить тестовые данные в папке testdata вместе с тестом. В этом случае вы должны хранить представленный шаблон в так называемом «золотом файле». Сам тест предоставляет флаг update для записи последней версии (чтобы вам не приходилось вручную поддерживать вывод):

var update = flag.Bool("update", false, "update .golden files")
func TestProcessString(t *testing.T) {
  vars := make(map[string]interface{})
  vars["columnPrefix"] = "adgroup_performance_report"
  actual := processString(query, vars)
  golden := filepath.Join(“testdata”, ”performance_report.golden”)
  if *update {
    ioutil.WriteFile(golden, actual, 0644)
  }
  expected, _ := ioutil.ReadFile(golden)

  if !bytes.Equal(actual, expected) {
    t.Fatalf("Output did not match, expected %v, recieved %v, expected, actual)
  }
}

Хороший пример этого шаблона можно найти вgofmt исходный код: https://golang.org/src/cmd/gofmt/gofmt_test.go

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...