我有这个类来模拟DAO:
//...
private ClientesRepository clientesRepository;
@Mock
private Cliente cliente;
@Mock
private EntityManager manager;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
manager = Mockito.mock(EntityManager.class);
clientesRepository = new ClientesRepository(manager);
}
@Test
public void testBuscarPorId() {
Mockito.when(manager.find(Cliente.class, new Long(1))).thenReturn(cliente);
Cliente clientePesquisado = clientesRepository.buscarPorId(new Long(1));
assertEquals(Long.valueOf(1), clientePesquisado.getId());
}
但只是我嘲笑的对象管理器才归零......我怎么能解决这个问题?
答案 0 :(得分:0)
假设您的DAO正在为给定ID返回类型为Cliente
的对象,则可能是以下原因。 (我猜是因为你还没有发布方法clientesRepository.buscarPorId()
的代码)。
但只是我嘲笑的对象管理器才归零......我怎么能解决这个问题?
原因是你告诉manager
给你一个模拟对象,即cliente
。对于返回对象的方法,此对象默认返回null
值。这意味着clientePesquisado.getId()
将返回null
,因为Long
是一个对象。以下是Mockito
文档的摘录:
默认情况下,对于返回值的所有方法,mock将根据需要返回null,基元/原始包装器值或空集合。例如0表示int / Integer,false表示布尔值/布尔值。
因此,您必须将测试方法更改为以下内容:
//...
private ClientesRepository clientesRepository;
@Mock
private EntityManager manager;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
clientesRepository = new ClientesRepository(manager);
}
@Test
public void testBuscarPorId() {
Cliente expected = new Cliente(1, ...);
Mockito.when(manager.find(Cliente.class, new Long(1))).thenReturn(expected);
Cliente clientePesquisado = clientesRepository.buscarPorId(new Long(1));
assertEquals(Long.valueOf(1), clientePesquisado.getId());
}