为了账号安全,请及时绑定邮箱和手机立即绑定

测试使用 os.Create() 创建的文件

测试使用 os.Create() 创建的文件

Go
泛舟湖上清波郎朗 2022-07-25 11:20:41
我想为以下函数创建一个测试,该函数在特定路径上创建一个文件:    exists, err := IsFileExists(path)    if err != nil {        return err    }    if exists {        return errors.New("File already exists")    }    file, err := os.Create(path)    defer file.Close()    return err我知道在 JUnit 中有TemporaryFolder 规则可以帮助您设置测试所需的文件和目录结构,如下所示:public class DummyFileClassTest {    @Rule    public TemporaryFolder folder = new TemporaryFolder();    @Test    public void someMethod() {        // given        final File file1 = folder.newFile("myfile1.txt");        final File file2 = folder.newFile("myfile2.txt");        ... etc...    }}Go中有类似的东西吗?还是更好的方法?
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

testing 提供 TempDir来获取一个测试目录,每次测试后都会清理该目录。


import(

  "testing"

  "path"

)


func TestConvert(t *testing.T) {

    tmpdir := t.TempDir()

 

    ...


    // tmpdir will be cleaned up

}

然后,您可以path.Join(tmpdir, "test.file")在临时目录中创建一个具有特定名称的文件,或者ioutil.TempFile(tmpdir, "*")创建一个随机文件。


请注意,您的函数包含竞争条件。如果两个进程同时检查文件,它们都会断定该文件不存在并尝试创建文件。一个将创建文件,另一个将截断它。这是“检查然后做”。


相反,创建文件,然后检查错误。“然后检查”。


查看完整回答
反对 回复 2022-07-25
  • 1 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信