首页 > 解决方案 > 在测试 Streams 的供应商时我可以避免强制转换吗

问题描述

使用 AssertJ 时,我可以在测试 Streams 的供应商时避免强制转换吗?

我尝试查看未解决的问题,大多数指向https://github.com/joel-costigliola/assertj-core/issues/683,但我认为这不是直接匹配。

        Supplier<Stream<String>> supplier = 
                 () -> Stream.of("String1", "String2");
        assertThat(supplier).isNotNull()
                .extracting(Supplier::get)
                .isInstanceOf(Stream.class)
                .satisfies((stream) ->
                        assertThat((Stream)stream)
                                .contains("String1", "String2"));

测试有效,但我想尽可能避免流式传输。谢谢。

标签: assertj

解决方案


我同意 tkruse 的评论!

我只是想在 AssertJ Core 下一个版本(3.13.0)中添加它,您将能够用于asInstanceOf转换被测对象并访问特定于类型的断言,请参阅https://github.com/joel-costigliola/assertj-核心/拉/1498

Object value = 0;
assertThat(values).asInstanceOf(INTEGER).isZero();

在你的情况下,我相信你可以写:

assertThat(supplier).isNotNull()
                    .extracting(Supplier::get)
                    .asInstanceOf(STREAM)
                    .satisfies(stream -> assertThat(stream).contains("String1", 
                            "String2"));


推荐阅读