Я пытаюсь изменить некоторые определения сторонних классов перед каждым тестом, чтобы имитировать разные результаты. Мне приходится использовать что-то вроде javassist, потому что расширение классов иногда просто невозможно из-за модификаторов доступа. Вот пример того, что я пытаюсь сделать с javassist и junit вместе:
public class SimulatedSession extends SomeThirdParty {
private boolean isJoe = false;
public SimulatedSession(final boolean isJoe) {
this.isJoe = isJoe;
}
@Override
public void performThis() {
final ClassPool classPool = ClassPool.getDefault();
final CtClass internalClass = classPool.get("some.package.Class");
final CtMethod callMethod = internalClass.getDeclaredMethod("doThis");
if (isJoe) {
callMethod.setBody("{System.out.println(\"Joe\");}");
} else {
callMethod.setBody("{System.out.println(\"mik\");}");
}
internalClass.toClass();
}
}
@Test
public void firstTest() {
SimulatedSession toUse = new SimulatedSession(false);
// do something with this object and this flow
}
@Test
public void nextTest() {
SimulatedSession toUse = new SimulatedSession(true);
// do something with this object and this flow
}
если я запускаю каждый тест по отдельности, я могу нормально запустить код. Когда я запускаю их с помощью набора модулей, один тест за другим, я получаю «зависшую проблему с классом». Чтобы обойти это, я просматриваю этот сообщение, однако должен признать, что не уверен, как можно использовать другой пул классов для решения проблемы.
new SimulatedSession(false).performThis();
- person Nicolas Filotto   schedule 09.12.2016