testing - 针对 xml/字符串测试失败的自定义 testify 输出

标签 testing go testify

我正在使用 testify 测试 XML 编码(marshal)处理,并使用 strings.Contains 检查我希望包含在 XML 中的行是否确实存在。

但是,我想区分实际 xml 与所需 xml。

目前,我的代码看起来像这样:

func (suite *BookSuite) TestXMLMarshal() {
    priceXML, priceErr := xml.Marshal(PriceType{Price: 10, Type: "IND"})

    suite.Nil(priceErr)
    linePresent := strings.Contains(string(priceXML), `<PriceType Price="10" Type="IND"></PriceType>`)

    if true != linePresent {
        err := errors.New("Expected: \n" + `<PriceType Price="10" Type="IND"></PriceType>` + "\nGot: \n" + bookString)
        suite.Error(err, err.Error())
        fmt.Println(err)
    }
}

xml 文件中的行数比测试中的行数多,因此您可以想象 if 语句会很糟糕。有什么关于清理它的更具可扩展性的想法吗?

最佳答案

除非格式很重要,否则测试像 xml.Marshal 这样的东西的快速彻底的方法是编码来回并比较对象

func (suite *BookSuite) TestXMLMarshal() {

    priceXML, priceErr := xml.Marshal(PriceType{Price: 10, Type: "IND"})

    suite.Nil(priceErr)

    var secondPrice PriceType
    unerr :=  xml.Unmarshal(priceXML, &secondPrice)
    suite.Nil(unerr)

    if !reflect.DeepEqual(&priceXML,&secondPrice){
        err := fmt.Errorf("Expected: '%+v'\nGot: %+v\n",priceXML,secondPrice)
        suite.Error(err, err.Error())
        fmt.Println(err)
    }
}

未测试,但应该是这样的。

关于testing - 针对 xml/字符串测试失败的自定义 testify 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36580403/

相关文章:

go - golang是否有像 'as'这样的运算符(C#)

python - 如何使用正则表达式将 asterix * 替换为 html <em> 标签

go - 匿名字段作为指针或嵌入

windows - Go- CPU/内存/网络

Apache ,mod_auth_kerb,mod_proxy : Get authenticated user in Go Web Application

go - 如何在 Go 中模拟 Stripe?

android - 添加库以进行刀柄测试的问题

性能测试。如何提高硬盘操作的稳定性

go - 如何在使用gin框架进行模拟时将json数据作为请求参数传递

unit-testing - 使用 testify 使用不同的输入和输出模拟接口(interface)方法两次