Skip to content

Add Kotlin Sequence support for @TestFactory, @MethodSource, and @FieldSource #3376

@hanszt

Description

@hanszt
Contributor

Overview

It would be nice if you could write something like this in Kotlin when working with JUnit Jupiter.

        @TestFactory
        fun `dynamic tests returned as Kotlin sequence`() = generateSequence(0) { it + 2 }
                .map { dynamicTest("$it should be even") { assertTrue(it % 2 == 0) } }
                .take(10)

Currently you have to add .toIterable() as an extra line to make it work with JUnit Jupiter.

The Kotlin Sequence class is an example of an iterator providing class, but it is not an Iterable. That's why it does not work as return type for @TestFactory methods at the moment.

A benefit of adding this at this low level is that, Kotlin Sequences, or any other Iterator or Spliterator providing class can now also be used in other JUnit Jupiter methods where an object from an annotated method needs to be converted to a stream.

I have an implementation for it ready. see:

Suggestion

All tests still pass.

I would like to contribute to JUnit 5 and make a pull request for this branch, but I don't have push permission yet for a feature branch in the JUnit 5 project.

Could you please be so kind to take a look at the suggestion I provided?

Thanks in advance! I'm awaiting your response :)

Deliverables

  • Adding support for converting iterator providing classes to a stream in org.junit.platform.commons.util.CollectionUtils.
    Adding support for converting Spliterator providing classes to a stream in org.junit.platform.commons.util.CollectionUtils.

Activity

changed the title [-]Add kotlin sequence support for @testfactory methods[/-] [+]Add kotlin Sequence support for @TestFactory annotated methods[/+] on Jul 2, 2023
marcphilipp

marcphilipp commented on Jul 7, 2023

@marcphilipp
Member

Team decision: Add convention-based conversion to Stream that looks for methods called iterator that return Iterator.

added this to the 5.11 M1 milestone on Jul 7, 2023

7 remaining items

changed the title [-]Add kotlin Sequence support for @TestFactory annotated methods[/-] [+]Add Kotlin `Sequence` support for `@TestFactory` methods[/+] on Jun 2, 2024
removed this from the 5.11 M3 milestone on Jul 5, 2024
self-assigned this
on May 6, 2025
added this to the 5.13.0-RC1 milestone on May 6, 2025
changed the title [-]Add Kotlin `Sequence` support for `@TestFactory` methods[/-] [+]Add Kotlin `Sequence` support for `@TestFactory`, `@MethodSource`, and `@FieldSource`[/+] on May 8, 2025
added a commit that references this issue on May 8, 2025
4083551
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Add Kotlin `Sequence` support for `@TestFactory`, `@MethodSource`, and `@FieldSource` · Issue #3376 · junit-team/junit-framework