gpt4 book ai didi

java - junit.Assert.assertTrue 失败,但仅当我编译模块时?

转载 作者:行者123 更新时间:2023-11-30 05:47:39 27 4
gpt4 key购买 nike

摘要

仅当我编译模块 ( 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我和assertTrue!false :

enter image description here

当我从 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)

最佳答案

最后,这只是一个编译问题。

  • 我已经在类 ProductUtils 中编写了函数 isBatchOfProducts(),该类位于不同的 Maven 项目(例如 Project X)
  • 我已将单元测试 testListOfOneEmptyXmlProducts() 写入项目 Y
  • 通过这次单元测试,我发现了一个错误并更改了 isBatchOfProducts()
  • 我重新运行了单元测试,它是绿色的(因为 Eclipse 显然是在幕后编译我对 Project X 所做的更改)
  • 我尝试编译项目 Y,但失败了,因为仍然指向旧版本的 .jar

基本上没有问题。请记住始终重新编译您更改的内容:)

关于java - junit.Assert.assertTrue 失败,但仅当我编译模块时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54571311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com