gpt4 book ai didi

java - Mockito - 模拟遗留类构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:18 25 4
gpt4 key购买 nike

我正在为一个通过构造函数引用遗留类的类编写 JUnit。遗留类在第三方 jar 中,所以我无法重构它以使生活更轻松....

这是被测试的类...

public MyClass {

public String methodToTest(String param) {
LegacyClass legacy = new LegacyClass(param);
*..... etc ........*
}
}

这就是我在 mockito JUnit 中尝试做的事情。

public MyClassTest {

@Test
public void testMethodToTest() throws Exception {
LegacyClass legacyMock = mock(LegacyClass.class);
when(*the LegacyClass constructor with param is called*).thenReturn(legacyMock);
*.... etc.....*
}
}

关于如何执行此操作的任何想法?????

最佳答案

LegacyClass 创建一个 builder:

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会用。

关于java - Mockito - 模拟遗留类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6288575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com