«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как протестировать неэкспортированные функции в Go?

Как протестировать неэкспортированные функции в Go?

Опубликовано 6 ноября 2024 г.
Просматривать:992

How Can You Test Unexported Functions in Go?

Вызов тестовых функций из нетестовых файлов Go

В Go функции тестирования не следует вызывать из самого кода. Вместо этого модульные тесты должны выполняться с помощью команды go test .

Тестирование «черного и белого ящика»

Go поддерживает два типа модульного тестирования: «черный ящик» и «белый ящик». .

Тестирование «черного ящика» тестирует экспортированные функции извне пакета, моделируя, как внешние пакеты будут взаимодействовать с it.

Тестирование «белого ящика» тестирует неэкспортированные функции внутри самого пакета.

Пример

Рассмотрим пакет под названием example с экспортированной функцией Sum и неэкспортированная служебная функция add.

// example.go
package example

func Sum(nums ...int) int {
    sum := 0
    for _, num := range nums {
        sum = add(sum, num)
    }
    return sum
}

func add(a, b int) int {
    return a   b
}

Тестирование «черного ящика» (в example_test.go):

package example_test

import (
    "testing"

    "example"
)

func TestSum(t *testing.T) {
    tests := []struct {
        nums []int
        sum  int
    }{
        {nums: []int{1, 2, 3}, sum: 6},
        {nums: []int{2, 3, 4}, sum: 9},
    }

    for _, test := range tests {
        s := example.Sum(test.nums...)
        if s != test.sum {
            t.FailNow()
        }
    }
}

Тестирование «белого ящика» (в example_internal_test.go):

package example

import "testing"

func TestAdd(t *testing.T) {
    tests := []struct {
        a   int
        b   int
        sum int
    }{
        {a: 1, b: 2, sum: 3},
        {a: 3, b: 4, sum: 7},
    }

    for _, test := range tests {
        s := add(test.a, test.b)
        if s != test.sum {
            t.FailNow()
        }
    }
}

Подводя итог, модульные тесты следует выполнять с помощью команды go test и никогда не вызывать непосредственно из кода. Тестирование «черного» и «белого ящика» обеспечивает различные уровни доступа к реализации пакета в целях тестирования.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3