0

我正在使用 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 语句将是粗略的。关于清理这个更具可扩展性的任何想法?

4

1 回答 1

1

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

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

于 2016-04-12T18:17:36.727 回答