Nea*_*eal 3 java testing junit
我有两个测试,我们称它们为测试 A 和测试 B。
在测试 A 中,我们有这条线
System.setProperty("<interface>", "<implementation>);
Run Code Online (Sandbox Code Playgroud)
在测试 B 中,我们有相同的线路。
当两条线都存在时,测试 B 失败。当我注释掉测试 A 中的行时,测试 B 成功。如果我做一个
System.clearProperty("<interface>")
Run Code Online (Sandbox Code Playgroud)
测试 B 失败。
我对具有不同接口属性的测试 C 和 D 有类似的问题。测试 C 设置它,测试 D 没有。当我注释掉 set 调用时,D 通过了。当我没有。D 失败。当我调用 clear 时,D 失败了。
调用 clear 和注释掉该行都会导致 B 和 D 在该系统属性中具有“正确”的值,但是当我调用 clear 时它们会失败(尽管与注释掉的行具有相同的值)并在注释掉时成功. 任何人都知道为什么会这样?
片段显示它的作用
System.setProperty("INTERFACE_NAME", "IMPLEMENTATION_NAME");
//getOBJECT will now return a type of IMPLEMENTATION_NAME
INTERFACE mockedINTERFACE = INTERFACE.getDirectory().getOBJECT(domain);
Run Code Online (Sandbox Code Playgroud)
测试应该是相互独立的。如果他们改变了全局状态,例如系统属性,他们应该在测试执行后恢复改变。
确保您的每个测试在单独运行时都通过,然后添加@Before和@After方法将更改恢复到全局状态。
private String oldValue;
@Before
public void setUp() {
oldValue = System.getProperty("key");
System.setProperty("key", ...);
}
@After
public void tearDown() {
if (oldValue != null) {
System.setProperty("key", oldValue);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,默认情况下未设置的属性很棘手,也许使用Optional<String>.