我正在使用 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)
}
}
沒有經過測試,但應該是這樣的。
- 1 回答
- 0 關注
- 140 瀏覽
添加回答
舉報
0/150
提交
取消