以前在 JUnit4 中,您可以执行以下操作:
@RunWith(Parameterized.class)
public class MyTest
{
private final int number;
public MyTest(int number) {
this.play = play;
}
@Test
public void testIsEven() {
assertEquals(true, number % 2 == 0);
}
@Test
public void testIsNotOdd() {
assertEquals(false, number % 2 != 0);
}
@Parameterized.Parameters
public static int[] data() {
return new int[] { 2, 4, 6 }
}
}
Run Code Online (Sandbox Code Playgroud)
这将遍历数组,MyTest使用每个值实例化,然后在每个实例上运行所有测试。有关更多详细信息,请参阅参数化文档。
现在在 JUnit5 中,事情发生了变化,根据新文档,您必须像这样编写相同的测试:
public class MyTest {
@ParameterizedTest
@MethodSource("data")
public void testIsEven(int number) …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个类可以实现的接口,使它们"可复制",一个(类型)安全的Clonable.
在Java中,我会使用递归泛型做类似的事情:
public interface Copyable<C extends Copyable<C>> {
C copy();
}
public class Example implements Copyable<Example> {
...
@Override
public Example copy()
{
return new Example(this); //invoke copy constructor
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这不是那么优雅,标题Copyable和Example看起来过于复杂.在Kotlin有更优雅的方式来实现这一目标吗?