英文:
Testing function to get 100% coverage
问题
你好!以下是对该函数编写测试以实现100%覆盖率的方法:
首先,你需要导入所需的测试包和函数包:
import (
"testing"
"os"
"fmt"
)
然后,你可以编写一个测试函数来测试countLines
函数:
func TestCountLines(t *testing.T) {
// 创建一个测试用的文件切片
files := []string{"file1.txt", "file2.txt"}
// 调用countLines函数
result := countLines(files)
// 检查返回的结果是否符合预期
expected := 0 // 你需要根据具体情况设置预期值
if result != expected {
t.Errorf("Expected %d, but got %d", expected, result)
}
}
在测试函数中,你可以创建一个测试用的文件切片,然后调用countLines
函数并将结果与预期值进行比较。如果结果与预期值不匹配,你可以使用t.Errorf
函数输出错误信息。
最后,你可以在测试文件中运行该测试函数,以确保对countLines
函数进行了全面的测试。
希望这可以帮助到你!如果你有任何其他问题,请随时问我。
英文:
How would you write a test for the below function to get 100% coverage?
func countLines(files []string) int {
sum := 0
for _, e := range files {
f, err := os.Open(e)
if err != nil {
fmt.Fprintf(os.Stderr, "err: %v\n", err)
continue
}
sum += countFileLine(f)
f.Close()
}
return sum
}
答案1
得分: 2
极端的方式
将方法签名更改为接受 func (string) (os.File, error)
作为输入,并在进行测试时进行注入。
大致如下:
func countLines(files []string, open func(string) (*os.File, error)) int {
...
f, err := open(e)
...
}
然后,您可以进行测试并注入一个函数,该函数将返回您为测试安排的内容。
实用的方式
只需在包的 test
目录下创建文件,并使用这些文件进行测试。
优点是方法更简单,测试也更简单。当您有很多依赖项时,第一种方法可能会变得相当麻烦...
英文:
The extremist way
Change the method signature to take as input a func (string) (os.File, error)
and inject it while doing the tests.
Something along these lines:
func countLines(files []string, open func(string) (*os.File, error)) int {
...
f, err := open(e)
...
}
Then, you can do tests and inject a function that will returns what arrange you for the test.
The practical way
Simply create files under a test
directory of your packages, and do you tests using these files.
The upside is that the method is simpler, the tests too. The first method can become quite bothersome when you have a lot of dependencies…
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论