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

用于 xml / 字符串测试失败的自定义 testify 输出

用于 xml / 字符串测试失败的自定义 testify 输出

Go
千万里不及你 2022-01-04 11:04:50
我正在使用 testify 测试 XML 封送处理,并strings.Contains用于检查我希望包含在 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 语句会很糟糕。关于清理这个更具可扩展性的任何想法?
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

除非格式很重要,否则测试诸如 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)

    }

}

没有经过测试,但应该是这样的。


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号