Junit5 测试套件与 Kotlin
Junit5 test suite with Kotlin
根据 this link 中的答案,使用测试 classes
创建了一个测试套件
@RunWith(Suite::class)
@Suite.SuiteClasses(
DTOtoEntityMapperTest::class,
PostDataSourceCoroutinesTest::class,
PostDataSourceRxJava3Test::class
)
class JUnit5TestSuite
Returns错误
org.junit.runners.model.InvalidTestClassError: Invalid test class 'com.x.DTOtoEntityMapperTest':
1. No runnable methods
但是添加的每个测试 class 都有测试方法并单独运行,例如
class DTOtoEntityMapperTest {
private val postDTOList by lazy {
convertFromJsonToObjectList<PostDTO>(getResourceAsText(RESPONSE_JSON_PATH))!!
}
private val postEntityList by lazy {
convertFromJsonToObjectList<PostEntity>(getResourceAsText(RESPONSE_JSON_PATH))!!
}
@Test
fun `given PostDTO is input, should return PostEntity`() {
val mapper = DTOtoEntityMapper()
// GIVEN
val expected = postEntityList
// WHEN
val actual = mapper.map(postDTOList)
// THEN
Truth.assertThat(actual).containsExactlyElementsIn(expected)
}
}
对于 JUnit 5,我使用了 JUnitPlatform 和 SelectClasses(或 SelectPackages):
@RunWith(JUnitPlatform::class)
@SelectClasses(Some1Test::class, Some2Test::class)
class SuiteTest
检查了几天后,我发现正确的库可以使用 Junit 5 测试套件和 kotlin
在build.gradle中,添加如下2个库:
testImplementation ("org.junit.platform:junit-platform-suite-api:1.7.0")
testImplementation ("org.junit.platform:junit-platform-runner:1.2.0")
然后您可以使用如下测试套件:
import org.junit.platform.runner.JUnitPlatform
import org.junit.platform.suite.api.SelectClasses
import org.junit.platform.suite.api.SelectPackages
import org.junit.runner.RunWith
@RunWith(JUnitPlatform::class)
@SelectClasses(BasicMockKUnitTest::class, HierarchicalMockKUnitTest::class)
@SelectPackages("exercise")
class TestAllSelectPackage {
}
您现在可以 运行 完全使用 jUnit 5 引擎的套件:
import org.junit.platform.suite.api.SelectClasses
import org.junit.platform.suite.api.Suite
@Suite
@SelectClasses(BasicMockKUnitTest::class, HierarchicalMockKUnitTest::class)
@SelectPackages("exercise")
class TestAllSelectPackage {
}
您必须导入 junit-platform-suite-engine
:
https://search.maven.org/artifact/org.junit.platform/junit-platform-suite-engine
这里有一些文档:
https://junit.org/junit5/docs/snapshot/user-guide/#launcher-api-engines-custom
https://junit.org/junit5/docs/snapshot/api/org.junit.platform.suite.engine/org/junit/platform/suite/engine/package-summary.html
这是一个官方示例:
https://github.com/junit-team/junit5/blob/main/documentation/src/test/java/example/SuiteDemo.java
根据 this link 中的答案,使用测试 classes
创建了一个测试套件@RunWith(Suite::class)
@Suite.SuiteClasses(
DTOtoEntityMapperTest::class,
PostDataSourceCoroutinesTest::class,
PostDataSourceRxJava3Test::class
)
class JUnit5TestSuite
Returns错误
org.junit.runners.model.InvalidTestClassError: Invalid test class 'com.x.DTOtoEntityMapperTest':
1. No runnable methods
但是添加的每个测试 class 都有测试方法并单独运行,例如
class DTOtoEntityMapperTest {
private val postDTOList by lazy {
convertFromJsonToObjectList<PostDTO>(getResourceAsText(RESPONSE_JSON_PATH))!!
}
private val postEntityList by lazy {
convertFromJsonToObjectList<PostEntity>(getResourceAsText(RESPONSE_JSON_PATH))!!
}
@Test
fun `given PostDTO is input, should return PostEntity`() {
val mapper = DTOtoEntityMapper()
// GIVEN
val expected = postEntityList
// WHEN
val actual = mapper.map(postDTOList)
// THEN
Truth.assertThat(actual).containsExactlyElementsIn(expected)
}
}
对于 JUnit 5,我使用了 JUnitPlatform 和 SelectClasses(或 SelectPackages):
@RunWith(JUnitPlatform::class)
@SelectClasses(Some1Test::class, Some2Test::class)
class SuiteTest
检查了几天后,我发现正确的库可以使用 Junit 5 测试套件和 kotlin
在build.gradle中,添加如下2个库:
testImplementation ("org.junit.platform:junit-platform-suite-api:1.7.0")
testImplementation ("org.junit.platform:junit-platform-runner:1.2.0")
然后您可以使用如下测试套件:
import org.junit.platform.runner.JUnitPlatform
import org.junit.platform.suite.api.SelectClasses
import org.junit.platform.suite.api.SelectPackages
import org.junit.runner.RunWith
@RunWith(JUnitPlatform::class)
@SelectClasses(BasicMockKUnitTest::class, HierarchicalMockKUnitTest::class)
@SelectPackages("exercise")
class TestAllSelectPackage {
}
您现在可以 运行 完全使用 jUnit 5 引擎的套件:
import org.junit.platform.suite.api.SelectClasses
import org.junit.platform.suite.api.Suite
@Suite
@SelectClasses(BasicMockKUnitTest::class, HierarchicalMockKUnitTest::class)
@SelectPackages("exercise")
class TestAllSelectPackage {
}
您必须导入 junit-platform-suite-engine
:
https://search.maven.org/artifact/org.junit.platform/junit-platform-suite-engine
这里有一些文档:
https://junit.org/junit5/docs/snapshot/user-guide/#launcher-api-engines-custom https://junit.org/junit5/docs/snapshot/api/org.junit.platform.suite.engine/org/junit/platform/suite/engine/package-summary.html
这是一个官方示例:
https://github.com/junit-team/junit5/blob/main/documentation/src/test/java/example/SuiteDemo.java