gpt4 book ai didi

java - AssertJ 测试集合 : what is better: 'extracting' or Java8 forEach

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:27 25 4
gpt4 key购买 nike

我是 AssertJ 的新手,我用它来对我编写的代码进行单元测试,并且在考虑如何断言列表。

假设我们有一个消费者实体列表。每个实体都有自己的电话、自己的服务提供商,后者有自己的名称和实体名称。

现在我们要断言存储库中的每个实体都获得了正确的数据,因此我们要测试列表中的每个项目是否具有相同的电话。

ConsumerEntity savedConsumer1 = Consumer(phone, name, serviceProvider)
List<ConsumerEntity> consumerListFromRepository = repository.findAllByPhone(phone)

现在我想测试一下Repository给的数据是否正确,

我可以用这个:

   assertThat(consumerListFromRepository)
.extracting(ConsumerEntity::getPhone())
.containsOnly(savedConsumer1.getPhone());

或者我可以使用 forEach (java 8) 执行此操作:

   consumerListFromRepository.forEach(consumerEntity ->
assertThat(consumerEntity.getPhone()).isEqualTo(savedConsumer1.getPhone()));

1. 哪个更快/简单/可读?我会选择 forEach,因为它的代码行更少,但可读性也更差。

2. 是否有任何其他方法可以像 foreach 但使用 asserThat 那样使用 1liner?所以它将是可读的和简单的 - 并且不需要使用 EqualTo each

时间?像这样的东西:

   asserThat(list).forEach........

3. 哪个更快?提取还是 forEach?

谢谢!

最佳答案

我不确定“更快”是这里的主要关注点。任何性能差异都可能无关紧要;要么底层实现在非功能方面是等效的,要么 - 因为这里的上下文是单元测试 - consumerListFromRepository 非常小,从而限制了任何 Material 性能差异的范围。

我想你主要关心的应该是

  • 让其他开发者尽可能轻松地:
    • 了解/了解您的测试用例
    • 编辑/重构您的测试用例
  • 确保您的断言方法与代码库中的其他测试用例一致

判断您的两种方法中哪一种最符合此框有些主观,但我认为以下考虑因素是相关的:

  • Java 8 forEach 构造很好理解,isEqualTo 匹配器明确且易于理解
  • AssertJ extracting helper 与 containsOnly 配对,不像 Java8 的 forEach 构造那样常见,但这种配对读起来合乎逻辑且易于理解<

所以,恕我直言,这两种方法都是有效的。如果您的代码库始终使用 AssertJ,那么我建议使用 extracting 帮助程序与 containsOnly 匹配器配对以保持一致性。否则,请使用最适合您的方式:)

关于java - AssertJ 测试集合 : what is better: 'extracting' or Java8 forEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47675339/

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