我正在尝试使用mockito为注入设置一个简单的单元测试。这个项目只是我朋友为他的项目进行测试的一个概念验证。使用Mockito设置单元测试
我遇到的问题是我从我打电话而不是“Hello World”的方法中得到空值。另外,当我调试时,我进入一个名为MethodInterceptorFilter
的类,它调用方法intercept
和IndexOutOfBoundsExpetion
作为它的一个参数。
有人知道我在做什么错吗?
DAO:
@Stateless
public interface DAO {
public String helloWorld();
}
DAO实现:
@Stateless
public class DAOImpl implements DAO{
public String helloWorld() {
return "Hello World";
}
}
服务:
@Stateless
public class Service {
@Inject
private DAO dao;
public String helloWorld() {
return dao.helloWorld();
}
}
测试:
public class RandomTest {
@InjectMocks
Service service = new Service();
@Mock
DAO dao;
@Before
public void init(){
MockitoAnnotations.initMocks(this);
}
@Test
public void testTest() {
assertEquals("Hello World", service.helloWorld());
}
}
顺便说一句,我使用的IntelliJ(不知道的事项,但说也无妨)。
首先,'@InjectMocks'创建该类的一个实例,并将使用'@Mock'(或'@Spy')注释创建的嘲讽注入此实例,因此尝试删除before方法。其次,'@mock'类是扩展你的类并且不实现任何方法的类,以指定你需要用when(...)存根的方法的行为。然后返回()如果你在使用'@Spy'来填充void方法,并且最后你需要在Test类中使用runner'@RunWith(MockitoJUnitRunner.class)'注解。 – LazerBanana
@Krystian_K您的解决方案与Yoav Gur(他刚刚删除)的解决方案相结合,谢谢! –
@Krystian_K如果你把你的评论变成答案,我会接受它 –