Метод модульного теста, который требует файла - PullRequest
0 голосов
/ 03 октября 2018

У меня есть следующая функция, и мне нужно создать для нее модульный тест

package main

import (
    "fmt"
    "io/ioutil"
    "os"
)

type Source struct {
    Path string
}

type fileReader interface {
    readOneFile() ([]byte, error)
}

func(s Source) readOneFile() ([]byte, error) {
    cwd, err := os.Getwd()
    file, err := ioutil.ReadFile(fmt.Sprintf("%s/file.txt", cwd))
    if err != nil {
        return nil, fmt.Errorf("erro reading file : %s", err.Error())
    }
    return file, err
}

Проблема в том, что я использую путь к файлу в методе, что лучше всего использовать для созданиямодульный тест для такого рода функций?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Тесты будут выполняться в каталоге, который содержит тесты

Так что Getwd даст путь к этому каталогу

Имя файла для тестовых данных в файлах в тестовых каталогах должно начинаться с подчеркивания _

Однако вашей программе нужен файл с именем "file.txt".Чтобы поддержать тестирование этого пути к файлу, который начинается не с _, создайте файл file.txt в (например) / tmp, выполните команду chdir to / tmp непосредственно перед запуском теста и дайте тесту выбрать только что созданный файл.

0 голосов
/ 03 октября 2018

Для написания юнит-теста вам нужно создать файл в том же пакете с fileName_test.go Предположим, ваше имя файла read.go, поэтому имя вашего тестового файла должно быть read_test.go.

read_test.go

      package main

      import (
         "testing"
         "fmt"
      )

    func TestReadOneFile(t *testing.T) {
        var a Source
        f, err := a.readOneFile()
        if err != nil {
           t.Errorf("incorrect")
        } else {
            fmt.Println("passed")
        }
    }

Здесь вы должны назвать имя вашей тестовой функции с Test в качестве префикса и вам необходимо импортировать пакет testing.

После создания модульного теста вы можете проверитьпокрытие кода, запустив две команды:

1. go test --coverprofile coverage.out
2. go tool cover -html=coverage.out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...