是否可以从另一个文件调用测试Func以开始测试

问题描述 投票:-1回答:2

是否可以从非测试go文件中调用测试函数以开始执行测试?

例如,我有一个测试功能:

package API

import "testing"

func TestAPI(t *testing.T) { 
...
}

我需要从非测试版文件中调用此文件。

package main

import "../API"

API.TestAPI()

我可以这样做吗?

go
2个回答
0
投票

Go中有一些很棒的测试模式。不幸的是,您尝试进行测试的方式无法正常工作。

您的单元测试应使用命令go test <pkg运行。绝对不要从代码内部调用测试。

Go中的单元测试通常有两种主要形式-黑盒单元测试。

白盒测试:从内部测试未导出功能包装本身。

黑盒测试:从外部测试已导出功能包,模拟其他包如何与之交互。

如果我有一个要测试的软件包example,有一个简单的exported函数,对提供的数字列表进行求和。 Sum函数还使用了一个unexported实用程序函数。

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:黑盒测试

[注意,我正在测试example程序包,但测试位于example_test程序包中。添加_test使Go编译器保持满意状态,并使其知道这是example的测试包。在这里,我们只能访问导出的变量和函数,这些变量和函数可以让我们测试外部软件包在导入和使用example软件包时将经历的行为。

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:白盒测试

注意,我正在测试example程序包,并且该测试也位于example程序包中。这允许单元测试访问未导出的变量和函数。

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的测试框架有更好的了解。为了简单起见,我没有在示例中使用任何外部库,尽管github.com/stretchr/testify是一个非常流行且功能强大的用于单元测试的软件包。


0
投票

您正在尝试的


-2
投票

不,您不能这样做。重新设计。

© www.soinside.com 2019 - 2024. All rights reserved.