使用ProcessBuilder API,您可以在启动每个进程之前更改环境变量。这里有一个代码片段,你可能会这样做。
@Test
void testVariant1(){
String [] commandArray =
{"java", "-cp", "your/class/path", "org.mydomain.myClass", ...};
Map<String, String> envVarsForThisTest = new HashMap<String, String>();
envVarsForThisTest.put("newProperty", "value1");
List<String> staleVars = new List<String>();
stateVars.add("oldProperty");
File workingDir = new File("myDir"));
Process p = runVariant(
commandArray, envVarsForThisTest, staleVars, workingDir);
Assert.assert(p.waitFor(), 0);
checkAssertions(p.getOutputStream(), p.getErrorStream());
}
void checkAssertions(OutputStream output, InputStream errorStream){
// where you'll check the return values against your expectations
}
void runVariant(String commandArray[],
Map<String,
String> newEnvironmentVariables,
List<String> environemntVariablesToRemove,
File workingDirectory){
ProcessBuilder pb = new ProcessBuilder(commandArray);
Map<String, String> env = pb.environment();
for(Map.Entry<String, String> entry : newEnvironmentVariables){
env.put(entry.key(), entry.value());
}
for(String staleVariable : environemntVariablesToRemove){
env.remove(staleVariable);
}
pb.directory(workingDirectory);
return pb.start();
}
是否为每个进程实例化了中间件?如果不是,那么即使是一个新的进程也不会覆盖缓存......也许,在中间件文档中的某个地方会有一种方法来清除缓存......我的回答建议了一种方法来为每个测试启动一个新进程不同的环境变量... – rrufai