gpt4 book ai didi

java - 如何在 Mockito 中模拟注入(inject)的 bean?

转载 作者:行者123 更新时间:2023-12-02 01:34:58 25 4
gpt4 key购买 nike

此测试有效:

@RunWith(MockitoJUnitRunner.class)
public class Test1 {

@InjectMocks private MyBean bean;

@Test
public void shouldWork() {
bean.test("ABC");
}
}

@Stateless
public class MyBean {

public String test(String s) {
System.out.println("This is a test " + s);
return s;
}
}

现在,我想在 MyBean 中注入(inject)一个新的 EJB MyBean2 并重新测试。为此,我也在 Test1 中模拟 MyBean2。这是新的测试:

@RunWith(MockitoJUnitRunner.class)
public class Test1 {

@Mock MyBean2 bean2;
@InjectMocks MyBean bean;

@Test
public void shouldWork() {
bean.test("ABC");
}

}


@Stateless
public class MyBean {

@Inject
MyBean2 bean2;

public String test(String s) {
return s + bean2.test2();
}
}


@Stateless
public class MyBean2 {
public String test2() {
return "DEF";
}
}

但是当我运行这个程序时,当 bean 尝试调用 bean2 方法时,我得到 NullPointerException ,可能是因为 Mockito 没有将注入(inject)的 bean 识别为 EJB。

如何实现这一点?

最佳答案

查看 Javadoc of @InjectMocks 。它指出您必须通过调用您的案例来调用正在使用的模拟的 init:

@RunWith(MockitoJUnitRunner.class)
public class Test1 {
@InjectMocks
MyBean bean;
@Mock
MyBean2 bean2;

@Before
public void init() {
MockitoAnnotations.initMocks(this);
}

@Test
public void shouldWork() {
when(bean2.test2()).thenReturn("mocked return");
assertThat(bean.test("ABC")).isEqualTo("ABCmocked return");
}
}

关于java - 如何在 Mockito 中模拟注入(inject)的 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55357180/

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