我正在根据这款Card Game的终端游戏工作,该游戏从

问题描述 投票:0回答:0
的软件包中,每个

Card存储在一个称为Board的外部软件包内,称为board

。由于
Card
必须向外部API提出请求,所以我的计划是创建使用用于测试dobs properties的接口的fake,例如
Card
板属性,当用户试图将卡放在完整或不存在的字段上时,这些程序会感到恐慌。
这是我的第一个项目,但我已经有了Python,嘲笑和单位测试的经验。我想创建
Board
没有任何接口参数,但是我在Internet上看到的所有示例都包含一个我认为遵循原理的参数。我已经阅读了devops的tovops
测试框架和
Go研讨会
互联网上的conterfacs章节,以及互联网上的大量研究,通常向我展示了复杂的示例,使我感到困惑。作为新的收养者,我的问题是:
如何模拟依赖于http请求的外部软件包结构?

这是我的代码:
Board/board_test.go

isFull
卡/卡 Card 当然,对于您的构建方式的构建方式,建议将网络交互与package board import ( "errors" "poker_squares/card" "testing" ) type fakeCard struct { data card.Card err bool } func (c fakeCard) Card() (card.Card, error) { if c.err { return "", errors.New("Couldn't create card") } return c.data, nil } func TestBoard(t *testing.T) { tests := []struct { desc string board Board want string expectError bool }{ { desc: "Add a card, board isn't full and isFull property is false", expectError: false, }, # Remove the rest of tests for brevity } } 的其他行为(是否存在)分开。假定在呼叫package card type CardGetter interface { Card() (Card, error) } type Card struct { value string suit string } func(c Card)()(Card, error){ # Fetch card from deckofcards API } 时获取数据可以实现良好的API设计(不能说,因此使用建议的内容),可以通过在类型

Card

Card

Card中引入一个新字段来实现。

为此,您将拥有执行实际网络调用的产品的实现,并进行一些测试双实现,以模拟您的测试所需的行为(返回预期数据,诱发故障等)。
注意,在Python中进行嘲笑在很大程度上依赖该语言的动态属性,因此嘲笑在GO(或任何其他严格的严格且静态典型的编程语言)中的工作方式将大不相同。
您的一般期望您会为您需要模拟的任何内容声明界面,并为模拟创建类型/模具。另外,将这些注射到SUTS中取决于您。在测试运行时没有结构行为的Dyanmic配置
    

unit-testing go interface mocking
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.