2016-04-12 3 views
0

Я тестирую XML-маршалинг с дачей показаний и используя strings.Contains, чтобы проверить, действительно ли строки, которые я ожидаю включить в XML, есть.Пользовательский вывод testify для проверки на отсутствие ошибок xml/string

Тем не менее, я хочу разделить фактический и желаемый 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, чем единственный в тесте, так как вы можете себе представить, что если заявление будет брутто. Любые идеи по очистке, которые более масштабируемы?

ответ

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) 
    } 
} 

не проверял, но должно быть что-то вроде этого.

+0

Thanks Matt. Но мы хотим протестировать фактический формат XML, потому что он потребляется третьей стороной, которая специфицирует XML-формат (мы должны перепрыгнуть через некоторые обручи). Любые идеи, как включить это? – daino3

+0

Если есть какие-то странные требования к пробелам, я бы сделал выше, а затем сделал xml prettyprint/canonicalization на выходе xml. Большинство приложений, потребляющих xml, не заботятся о пробелах (так как правило xml libary level обычно обрабатывает это). Если вам нужно больше управляющего кодирования/xml, Encoder.Indent управляет пробелом, который выводится. –

Смежные вопросы