gpt4 book ai didi

java - 将 JUnit 测试动态添加到测试类

转载 作者:搜寻专家 更新时间:2023-10-31 20:23:00 26 4
gpt4 key购买 nike

这些天我发现自己写了很多样板测试,我想以一种干净的方式优化掉很多这些基本测试,这样可以毫不费力地添加到所有当前测试类中。

这是一个基本的测试类:

class MyClassTest {

@Test
public void doesWhatItDoes() {
assertEquals("foo",new MyClass("bar").get());
}

}

假设如果 MyClass 实现了 Serializable,那么按理说我们要确保它确实是可序列化的。因此,我构建了一个您可以扩展的类,其中包含一组标准测试,这些测试将与其他测试一起运行。

我的问题是,如果 MyClass 没有实现 Serializable 实例,我们仍然在类中进行序列化测试。我们可以让它对不可序列化的类成功,但它仍然停留在测试列表中,一旦这个类开始构建,它就会变得越来越困惑。

我想做的是找到一种方法,在适当的地方动态添加那些与现有测试类相关的测试。我知道其中一些可以通过 TestSuit 完成,但是你必须为每个类维护两个测试类,这很快就会变得很麻烦。

如果有人知道不需要 eclipse 插件或类似东西的方法,那么我将永远感激不已。

编辑:添加了我上面描述的简短示例;

class MyClassTest extend AutoTest<MyClass> {

public MyClassTest() {
super(MyClass.class);
}

@Test
public void doesWhatItDoes() {
assertEquals("foo",new MyClass("bar").get());
}

}

public abstract class AutoTest<T> {
private final Class<T> clazz;
protected AutoTest(Clazz<T> clazz) {
super();
this.clazz = clazz;
}

@Test
public void serializes() {
if (Arrays.asList(clazz.getInterfaces()).contains(Serializable.class)) {
/* Serialize and deserialize and check equals, hashcode and other things... */
}
}
}

最佳答案

两个想法。

想法 1:使用假设

A set of methods useful for stating assumptions about the conditions in which a test is meaningful. A failed assumption does not mean the code is broken, but that the test provides no useful information. The default JUnit runner treats tests with failing assumptions as ignored.

@Test
public void serializes() {
assumeTrue(Serializable.class.isAssignableFrom(clazz));
/* Serialize and deserialize and check equals, hashcode and other things... */
}

想法 2: 实现您自己的测试运行程序。

http://junit.sourceforge.net/javadoc/ 查看 @RunWithRunner

关于java - 将 JUnit 测试动态添加到测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com