Сводка
Проверка модульного теста (junit.Assert.assertTrue
) не выполняется, только когда я компилирую модуль (mvn clean install
).Тем не менее, это не дает сбоя, если я запускаю JUnit
тесты на Eclipse, и когда я вижу, что делает функция, я не могу понять, почему компиляция не удалась.Кто-нибудь имеет какие-либо идеи о том, как я могу решить, что происходит не так?
Ниже приведены подробности для заинтересованных читателей :)
Функция для проверки:
У меня есть функция со следующим телом:
public static boolean isBatchOfProducts(List<?> products) {
boolean areBatches = (products != null && products.size() != 0);
for (Object product : products) {
areBatches = areBatches && product instanceof XmlProducts;
if (areBatches) {
XmlProducts xmlProducts = (XmlProducts)product;
areBatches = areBatches && !xmlProducts.getXmlProduct().isEmpty();
}
}
return areBatches;
}
Цель функции - вернуть true/false
, учитывая общий ввод List<?> products
:
- Если этот список не
null
или empty
... - ... если каждый объект этого списка является экземпляром
XmlProducts
... - ... и если для каждого экземпляра
XmlProducts
список XmlProduct
содержитне пусто ...
... тогда функция должна возвращать true
, false
в любом другом случае.
Модульный тест
Чтобы охватить это поведение, я добавил несколько модульных тестов, и один из них следующий:
@Test
public void testListOfOneEmptyXmlProducts() {
List<Object> listToPrice = BatchPricingHelper.createPricingApiInputEmptyBatchXmlProducts();
assertTrue(!ProductUtils.isBatchOfProducts(listToPrice));
}
Вывод, полученный из BatchPricingHelper.createPricingApiInputEmptyBatchXmlProducts()
, как следует из названия, этопросто List<?>
, содержащий только один XmlProducts
, в списке которого нет XmlProduct
(getXmlProduct()
пусто).
Когда я запускаю из Eclipse
Я легко вижу, что юнит тест зеленыйне соответствует всем критериям, чтобы быть партией продуктов, поэтому функция возвращает false
и I assertTrue
на !false
:

Когда я компилирую из Maven
Если я компилирую модуль, используя Maven, в частности команду mvn clean install
в каталоге, я получаю следующую ошибку:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running mycompany.sdk.pricing.impl.PricingSessionTest
Tests run: 15, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.311 sec <<< FAILURE! - in mycompany.sdk.pricing.impl.PricingSessionTest
testListOfOneEmptyXmlProducts(mycompany.sdk.pricing.impl.PricingSessionTest) Time elapsed: 0.004 sec <<< FAILURE!
java.lang.AssertionError:
at org.junit.Assert.fail(Assert.java:91)
at org.junit.Assert.assertTrue(Assert.java:43)
at org.junit.Assert.assertTrue(Assert.java:54)
at mycompany.sdk.pricing.impl.PricingSessionTest.testListOfOneEmptyXmlProducts(PricingSessionTest.java:279)
... вызывая, конечно, BUILD FAILURE
.Я попытался добавить в модульное тестирование все тело функции, которую я тестирую, и распечатать каждый вывод, чтобы увидеть, где оценка не удалась:
@Test
public void testListOfOneEmptyXmlProducts() {
List<Object> listToPrice = BatchPricingHelper.createPricingApiInputEmptyBatchXmlProducts();
boolean areBatches = (listToPrice != null && listToPrice.size() != 0);
System.out.println("list not null and not empty: " + areBatches);
for (Object product : listToPrice) {
areBatches = areBatches && product instanceof XmlProducts;
System.out.println("product is instance of XmlProducts: " + areBatches);
if (areBatches) {
XmlProducts xmlProducts = (XmlProducts)product;
areBatches = areBatches && !xmlProducts.getXmlProduct().isEmpty();
System.out.println("list of XmlProduct is not empty: " + areBatches);
}
}
System.out.println("Final result: " + areBatches);
assertTrue(!ProductUtils.isBatchOfProducts(listToPrice));
}
Странно, что яв выводе командной строки можно увидеть, что каждая оценка идет хорошо, и на самом деле это просто assertTrue
, который не работает:
Running mycompany.sdk.pricing.impl.PricingSessionTest
list not null and not empty: true << CORRECT!
product is instance of XmlProducts: true << CORRECT!
list of XmlProduct is not empty: false << CORRECT, THE LIST IS EMPTY!
Final result: false << CORRECT, IT SHOULD RETURN FALSE!
---BUT STILL THE FAILURE BELOW!---
Tests run: 15, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.311 sec <<< FAILURE! - in mycompany.sdk.pricing.impl.PricingSessionTest
testListOfOneEmptyXmlProducts(mycompany.sdk.pricing.impl.PricingSessionTest) Time elapsed: 0.004 sec <<< FAILURE!
java.lang.AssertionError:
at org.junit.Assert.fail(Assert.java:91)
at org.junit.Assert.assertTrue(Assert.java:43)
at org.junit.Assert.assertTrue(Assert.java:54)
at mycompany.sdk.pricing.impl.PricingSessionTest.testListOfOneEmptyXmlProducts(PricingSessionTest.java:279)