2016-04-05 6 views
0

Я написал интеграционный тест, который получает XML-документ из очереди и создает объект из него, который будет сохраняться в базе данных. Теперь, чтобы быть тщательным в своем тесте, я хочу проверить все поля, заполненные xml, то есть около 20 полей. Я написал утверждение для каждого поля.Несколько утверждений в тестах интеграции

assertTrue (payload.shipmentNo == object.shipmentNo) 
assertTrue (payload.shipmentEMEA.location == object.shipmentLocationMap.get(SHIPMENT_EMEA.toString())) 
assertTrue (payload.shipmentAMER.location == object.shipmentLocationMap.get(SHIPMENT_AMER.toString())) 
assertTrue (payload.shipmentAPAC.location == object.shipmentLocationMap.get(SHIPMENT_APAC.toString())) 
assertTrue (payload.shipmentVersion == object.shipmentVersion) 
assertTrue (payload.shipmentSourceId == object.shipmentSourceId) 
assertTrue (payload.noOfItemsInShipment == object.noOfItemsInShipment) 
assertTrue (payload.shipmentName == object.shipmentName) 
assertTrue (payload.shipmentDate == object.shipmentDate) 
assertTrue (payload.shipmentOwnerID == String.valueOf(object.shipmentOwnerID)) 
assertTrue (payload.shipmentClass == object.shipmentClass) 
assertTrue ('STARTED' == object.status) 

Но мне рекомендуется использовать одиночный оператор assert в тестовой папке. Мне было интересно, как я смогу это сделать, один из способов достичь - записать блок if, из которого возвращается true, только если все значения совпадают с xml, но в этом случае я теряю способность точно знать, какое поле терпит неудачу. Любые идеи, как я могу достичь обеих вещей, то есть у нас есть единый assert +, я точно знаю, какое поле не удалось.

+4

«Но я посоветовал использовать один оператор уверенно утверждать, по TestCase» Вам плохо советовали – Raedwald

+0

Плохой не начинает его покрывать. Вы уверены, что этот человек не после вашей работы? – Gimby

+3

Правило, что каждый тестовый пример должен иметь только одно утверждение [глупо] (http://stackoverflow.com/a/20300843/545127). – Raedwald

ответ

0

«Использование одного утверждения assert» - это хорошая практика в том, что вы проверяете одно правило. Это мешает вам написать «мега-тест», который проверяет слишком много вещей.

Итак, следует ли написать одно утверждение assert? Ну, да, надо. НО это рекомендация. При тестировании вы должны убедиться, что каждый тест проверяет одну функцию. Если ваша функция делает несколько вещей (может быть, вам стоит подумать снова и реорганизовать несколько функций), то несколько утверждений за тест кажутся мне полезными.

Как правило, думаю:

При написании тестов каждый тест должен протестировать один функцию при различных обстоятельствах

Кроме того, если несколько утверждает улучшить читаемость, идти с ними

0

В случае java вы можете использовать assertj для свободного использования:

http://joel-costigliola.github.io/assertj/

Например, вы можете сравнить объекты с помощью:

assertThat(payload).isEqualToComparingFieldByField(object); 

Вы можете использовать другой APIs метода, который может включить или исключить указанные поля

+0

Я думал об этом, но я должен проверить статус, должен быть «НАЧАЛО» плюс поле полезной нагрузки, каждое поле не имеет того же названия, что и объект, например. shipmentLocationMap –

+0

Да, в начале я думал, что есть те же объекты. – wsl