我首先要说的是,我对 Java 真正不了解的一件事是注解。
我来自 python 背景,所以我倾向于将注释视为可以做任何事情的方法的修饰符(比如 python 上的装饰器)。
现在,我有一个问题,就语法而言,如果可以使用注释来解决它看起来会很好,但我不知道它是否可以完成。
基本上,我有不同版本的 API:v1、v2、v3、v4。我对每个版本都有 JUnit4 测试。
ApiV1Test.java
@Test
public void featureX() {
Connection conn = new ApiConnection("v1");
response = conn.request("x", "foo")';
assertEquals("bar", response);
}
@Test
public void featureY() {
Connection conn = new ApiConnection("v1");
response = conn.request("y", "foo_y")';
assertEquals("bar_y", response);
}
ApiV2Test.java
@Test
public void featureX() {
Connection conn = new ApiConnection("v2");
response = conn.request("x", "foo")';
assertEquals("bar", response);
}
@Test
public void featureZ() {
Connection conn = new ApiConnection("v2");
response = conn.request("z", "foo_y")';
assertEquals("bar_z", response);
}
问题是不同的版本有不同的功能;v1 可能具有特性 X 和 Y,v2 可能具有特性 X 和 Z。依此类推,每个特性都在 API 的某个子集中可用。
因此,这会导致大量代码重复。我只想拥有一个具有所有不同功能的文件,并有一种机制可以说“为这些版本运行此测试”,例如:
@Test
@Versions("v1", "v2")
public void featureX(String version) {
Connection conn = new ApiConnection(version);
response = conn.request("x", "foo")';
assertEquals("bar", response);
}
@Test
@Versions("v1")
public void featureY(String version) {
Connection conn = new ApiConnection(version);
response = conn.request("y", "foo_y")';
assertEquals("bar_y", response);
}
@Test
@Versions("v2")
public void featureZ(String version) {
Connection conn = new ApiConnection(version);
response = conn.request("z", "foo_z")';
assertEquals("bar_z", response);
}
这可能吗?