如果未提供证书,则单元测试tls.LoadX509KeyPair将失败

  cert,err:= tls.LoadX509KeyPair(os.Getenv(“ CERT”),os.Getenv  (“ KEY”))
if err!= nil {
return err
}
</ code> </ pre>

我想为包含此功能的函数编写单元测试 代码段。 但是,我的测试环境在 os.Getenv(“ CERT”)</ code> / os.Getenv(“ KEY”)</ code>中永远不会包含任何内容。 这会使代码( tls.LoadX509KeyPair()</ code>)返回错误,但不允许我测试该功能。
我应该如何模拟/修改此代码段?</ p>
</ DIV>

展开原文

原文

cert, err := tls.LoadX509KeyPair(os.Getenv("CERT"), os.Getenv("KEY"))
if err != nil {
    return err
}

I want to write a unit test for a function that contains this snippet of code. However, my test environment will never have any content in os.Getenv("CERT")/os.Getenv("KEY"). This makes the code(tls.LoadX509KeyPair()) return an error, which doesn't let me test the function. How should I go about mocking/modifying this snippet?

doutui839638
doutui839638 不,这没有错。我的意思是广义的“环境”-环境变量,本地文件(例如证书)等。
一年多之前 回复
donglong2856
donglong2856 您的意思是在go代码中使用os.Getenv()是一种不好的做法?
一年多之前 回复
dongqiyou0303
dongqiyou0303 重构。如果要测试的代码依赖于未经测试的环境,那么您将无法对其进行测试,或者必须对其进行重构。
一年多之前 回复

1个回答



这是通过为 certFile </ code>和 keyFile </ code>定义变量,然后覆盖它们来起作用的 在测试环境中。</ p>

  // .. 
var certFile = os.Getenv(“ CERT”)
var keyFile = os.Getenv(“ KEY”)
/ /...
cert,err:= tls.LoadX509KeyPair(certFile,keyFile)
如果err!= nil {
return err
}
</ code> </ pre>

按照下面的链接查看如何在测试环境中覆盖var。
在Go中,如何在运行时获取测试环境? </ p>
</ div>

展开原文

原文

This works by defining vars for the certFile and keyFile and then overriding them in the test environment.

//.. 
var certFile = os.Getenv("CERT")
var keyFile = os.Getenv("KEY")
//...
cert, err := tls.LoadX509KeyPair(certFile, keyFile)
  if err != nil {
     return err
  }

Follow the below link to see how to override the vars in a test env. In Go,how to get test environment at run time?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问