Сделать строителем для LegacyClass
:
public class LegacyClassBuilder {
public LegacyClass build(String param) {
return new LegacyClass(param);
}
}
Таким образом, ваш класс может быть протестирован, поэтому он создает LegacyClass
с правильным параметром.
public MyClass {
private LegacyClassBuilder builder;
public setBuilder(LegacyClassBuilder builder) {
this.builder = builder;
}
public String methodToTest(String param) {
LegacyClass legacy = this.builder.build(param);
... etc
}
}
Тест будет выглядеть примерно так:
// ARRANGE
LegacyClassBuilder mockBuilder = mock(LegacyClassBuilder.class);
LegacyClass mockLegacy = mock(LegacyClass.class);
when(mockBuilder.build(anyString()).thenReturn(mockLegacy);
MyClass sut = new MyClass();
sut.setBuilder(mockBuilder);
String expectedParam = "LOLCAT";
// ACT
sut.methodToTest(expectedParam);
// ASSERT
verify(mockBuilder).build(expectedParam);
Если LegacyClass
окажется final
, то вам нужно создать не финальную оболочку для LegacyClass
, которую будет использовать MyClass
.