我有以下类(class)(将其压缩以专注于问题而不是显示整个类(class)):
@Component
public class ABCDEF {
private final Helper helper;
private final URI uri;
public ABCDEF(Helper helper, @Value("${endpoint.url}") URI uri) {
this.helper = helper;
this.uri = uri;
}
public void b(){
helper.toString();
}
}
对于其测试,我希望按如下方式注入(inject)模拟,但它不起作用。 帮助程序显示为 null,我最终必须添加一个默认构造函数才能抛出 URI 异常。
请建议解决此问题的方法,以便能够正确注入(inject)模拟。谢谢。
@RunWith(JUnitMockitoRunner.class)
public class ABCDEFTest {
@Mock
private Helper helper;
@InjectMocks
private ABCDEF abcdef = new ABCDEF(
helper,
new URI("test")
);
// adding just to be able to throw Exception
public ABCDEFTest() throws URISyntaxException {
}
@Test
public void b() {
abcdef.b();
}
}
注意:使用 Mockito 版本 1.10.19。需要坚持这个版本。
最佳答案
这应该有效:
@RunWith(MockitoJUnitRunner.class)
public class ABCDEFTest {
@Mock
private Helper helper;
private ABCDEF abcdef;
@Before
public void setUp() throws URISyntaxException {
abcdef = new ABCDEF(
helper,
new URI("test")
);
}
@Test
public void b() {
abcdef.b();
}
}
或者,您可以在 setUp
方法中初始化模拟,而不是使用 @RunWith
:
public class ABCDEFTest {
private Helper helper;
private ABCDEF abcdef;
@Before
public void setUp() throws URISyntaxException {
helper = Mockito.mock(Helper.class);
abcdef = new ABCDEF(
helper,
new URI("test")
);
}
@Test
public void b() {
abcdef.b();
}
}
关于java - 如何将模拟注入(inject)到具有 1 个带参数的构造函数的类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60546706/