java - JUnit 测试。创建列表会影响其他列表的大小。真的真的很奇怪

标签 java junit

这是我的测试:

@Test
public void returnsAllItemsInStock() {
    List<Item> demoItems = new ArrayList<Item>();

    Item demoItemOne = new Item();
    demoItemOne.setQuantity(0);

    Item demoItemTwo = new Item();
    demoItemTwo.setQuantity(17);

    demoItems.add(demoItemOne);
    demoItems.add(demoItemTwo); // List size currently 2

    Mockito.when(itemRepository.findAll()).thenReturn(demoItems);

    List<Item> items = inventoryService.allItemsInStock();// Here demoItems size somehow changes to 1

    Assert.assertEquals("List's size expected not to match", items.size(), demoItems.size()); // This one should fail because sizes shouldn't be equal, but they are..
}

这是我的服务实现:

@Override
@Transactional
public List<Item> allItemsInStock() {
    List<Item> items = new ArrayList<Item>();
    items = (List<Item>) itemRepository.findAll();

    for (Iterator<Item> it = items.iterator(); it.hasNext();) {
        Item item = it.next();
        if (item.getQuantity() <= 0) {
            it.remove();
        }
    }


    return items;
}

我在评论中解释了问题。检查我的测试。

最佳答案

demoItems 列表发生更改,因为您将其用作项目列表:您从服务的 findAll() 方法返回 demoItems

然后您可以删除数量为零的项目。他们是同一个名单。一点也不奇怪。

关于java - JUnit 测试。创建列表会影响其他列表的大小。真的真的很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19877737/

相关文章:

java - 将图像传递给同一类中的另一个函数

java - 使用奇怪的泛型覆盖 java 方法中的错误

java - 为什么在 JUnit 中不推荐使用 assertEquals(double,double)?

java - 我应该始终使用 Lambda 表达式进行异常测试吗?

java - 是否可以要求 junit 在进行测试之前运行处方?

java - 如何使用 Jersey Framework 为 Spring Boot 应用程序 REST 创建工作测试用例

java - graphStream 或 Apache Jena

android - JUnit - 获取 xml 报告?

swing - 在 headless (headless)环境中对 SWT 和 Swing 应用程序进行单元测试的最简单方法?

java - 删除实体会自动更新它们的关系吗?