- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 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 性能差异的范围。
我想你主要关心的应该是
判断您的两种方法中哪一种最符合此框有些主观,但我认为以下考虑因素是相关的:
forEach
构造很好理解,isEqualTo
匹配器明确且易于理解extracting
helper 与 containsOnly
配对,不像 Java8 的 forEach
构造那样常见,但这种配对读起来合乎逻辑且易于理解<所以,恕我直言,这两种方法都是有效的。如果您的代码库始终使用 AssertJ,那么我建议使用 extracting
帮助程序与 containsOnly
匹配器配对以保持一致性。否则,请使用最适合您的方式:)
关于java - AssertJ 测试集合 : what is better: 'extracting' or Java8 forEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47675339/
使用 Hamcrest 可以很容易地否定匹配器。例如。你可以写一个这样的断言: assertThat("The dog bites Tom", not(stringContainsInOrder(Ar
我找不到如何使用 assertj 检查以下内容(这很常见): 假设我有: result1 = {"AAA", "BBB"} result2 = {"DDD"} 我想检查结果中的值是其中之一: St
下面是一个例子: assertThat(commentById.getId()).isNotNull(); assertThat(commentById.getContent()).isNotBlan
我有一个 spring boot api 应用程序,我使用 springfox 生成 swaggerv2 api 文档,并且我创建了一个测试来查看我的 api 定义是否正确。 我的配置如下: @Con
我使用assertj来做一些espresso中不允许的断言,但我不明白这里的问题,我做了中所说的 here . build.gradle dependencies { // Android Tests
例子: public class Office { List employee; } 我如何在我的 List offices 中断言没有没有员工?是否可以用一个断言链来断言? 最佳答案 如果我正确
在停止开发后,我使用了FEST-Assert并移至AssertJ。 最近,我被指向 Google 存储库以及另一个声明库Truth(http://google.github.io/truth/)。 阅
所以我有一个String/String列表对映射,我想做的是在提取之后,将返回的列表组合成一个列表,在该列表上我可以执行更多的断言: MyTest.java Map> testMap = new H
AbstractIterableAssert#containsOnly说: Verifies that the actual group contains only the given values
我试图了解是否可以配置 AssertJ 将断言的否定结果记录到文件中,而不中断正在运行比较的路由。 此请求背后的原因是,我们正在比较软件的两个版本生成的 JSON 以发现差异,但我不想手动创建所有检查
我正在尝试验证提取列表中的第一项。然而 AssertJ 返回 List而不是 .first() 中的预期对象. 给出以下示例 public class AssertJTests { @Test
有没有办法用 AssertJ 检查对象是否是某个集合的元素?类似的东西 assertThat(actualObject).isElementOf(collectionWithExpectedOptio
我有一个测试用例,其中我使用执行程序服务并调用许多可调用线程。这些线程可能会导致成功调用,也可能会给出异常(这是预期的行为)。我需要断言 future 的对象要么抛出异常,要么返回正确的响应。 for
我想检查正在测试的集合是否包含以特定字符串结尾的任何元素。 对于 Hamcrest,它可能是这样的: assertThat("Contains an element ending with 'xyz'
我有一个可选列表,比如 List> optionals我喜欢用 assertj在它上面断言几件事。 但我没能正确地做到这一点——我只在单个可选上找到示例。 当然我可以自己做所有的检查 Assertio
假设我有一个Map我是这样的: assertThat( spyActionMap.get( "a" ) ).isInstanceOf( Action.class ); ...通过。现在我想检查
我正在使用 AssertJ 进行测试,我注意到有一种方法可以检查 List 是否存在。已排序: public static void sorted(final List actual) {
假设我有一个类 Foo ,它没有实现 Comparable和一个 FooComparator类,它实现 Comparator . 使用 AssertJ 的流畅 API,我现在假设我可以做这样的事情:
有没有一种方法可以在再次使用 AssertJ 时抛出异常来检查原因中的消息是否等于某个字符串。 我目前正在做类似的事情: assertThatThrownBy(() -> SUT.method())
在 AssertJ 中,您可以执行以下操作来断言列表的内容: assertThat(list).extracting("name").containsExactlyInAnyOrder("Alice"
我是一名优秀的程序员,十分优秀!