我非常喜欢作证所带来的go test
.但是,我挖掘了文档并没有看到任何关于如何处理多个断言的内容.
Go会处理"第一次失败",因为它在第一次错误断言时失败了,还是只关注测试方法中的最后一个断言?
我很长一段时间以来一直在试图找出SetupSuite
和之间的区别。SetupTest
根据博客上的信息,我了解到它SetupSuite
在整个套件之前运行并且SetupTest
在每个测试用例之前运行。但在这种情况下,什么是实际的例子呢?这两种情况下的依赖注入有何不同?
嗨,我正在尝试模拟 GO 中的结构。我正在使用作证来做到这一点。但我似乎无法让它工作,现在不要做我做错的事情。下面是我拥有的示例 main.go 和 main_test.go 文件
// Arithmetic ...
type Arithmetic interface {
Add(int, int) int
Subtract(int, int) int
}
// MathOperation ...
type MathOperation struct {}
// GetNewArithmetic ...
func GetNewArithmetic(obj Arithmetic) Arithmetic {
if obj != nil {
return obj
}
return MathOperation{}
}
// Add ...
func (a MathOperation) Add(num1 int, num2 int) int {
return num1 + num2
}
// Subtract ...
func (a MathOperation) Subtract(num1 int, num2 int) int {
return num1 - num2 …
Run Code Online (Sandbox Code Playgroud) 我正在努力理解 Go 中的模拟(我正在寻找与 Mockito.spy 相关的东西,相当于 Go 中的 Java)。
假设我在 Go 中有一个带有 5 个方法的接口。但是我要测试的这段代码只引用了两种方法。现在我如何在不实现所有方法的情况下模拟这种依赖关系,即我在源代码中的实际实现实现了 5 个接口方法,但是有没有办法避免在测试文件中实现 5 个方法的虚拟接口实现。以下是我目前的做法,实现5个方法是可以管理的,但是如果接口有20个方法,模拟实现测试文件中的所有方法变得乏味。
type Client struct {}
type ClientStore interface {
func(c *Client) methodOne() error {// some implementation}
func(c *Client) methodTwo() error {// some implementation}
func(c *Client) methodThree() error {// some implementation}
func(c *Client) methodFour() error {// some implementation}
func(c *Client) methodFive() error {// some implementation}
}
Run Code Online (Sandbox Code Playgroud)
func processFeed(c Client) error {
err := c.methodOne()
if(err != null) {
return err …
Run Code Online (Sandbox Code Playgroud) 我写了一个函数:
func AllItems(w http.ResponseWriter, r *http.Request) {
db, err := gorm.Open("sqlite3", "test.db")
if err != nil {
panic("failed to connect database")
}
defer db.Close()
var items [] Item
db.Find(&items)
fmt.Println("{}", items)
json.NewEncoder(w).Encode(items)
}
Run Code Online (Sandbox Code Playgroud)
我想对此进行单元测试.理想情况下,单元测试意味着需要测试每个功能线.我不确定如何打开数据库连接,然后是否显示数据库的所有内容.我该如何测试这段代码?
此函数是简单CRUD应用程序的GET端点.代码在这里.
我试图避免使用接口,因为我的用例不需要它(同样在https://www.ardanlabs.com/blog/2016/10/avoid-interface-pollution.html 中提到)。但是,要创建模拟(使用testify
),我是否不需要模拟接口?我可以创建一个,但似乎很乏味。我的代码使用的所有地方都需要为它们的模拟编写接口,而不是它们的实际使用。有解决方法吗?