Ich habe die folgenden abgespeckte Klassen (lassen Sie uns so tun, die Service-Schnittstelle hat nur die einzige überschriebene Methode der Einfachheit halber). Egal was ich versuche, bekomme ich immer eine NullPointerException, wenn die ServiceImpl
getSqlSession()
aufruft. Wie kann ich diesen Aufruf überschreiben, um die Ausnahme zu vermeiden? Ich habe versucht, einen Spion ServiceImpl zu erstellen und when
auf der Methode getSqlSession()
aufrufen, aber ich bekomme immer noch die Ausnahme. Ich möchte nicht die Logik in ServiceImpl.getData()
setzen, die die List<Object>
in eine Map<String,Object>
in der Testklasse ändert, da, wenn diese Implementierung sich jemals ändert, der Testcode auch geändert werden muss. Irgendwelche Vorschläge?Mockito NullPointerException von Super Class Methode Anruf
public class ServiceImpl extends BaseService implements Service {
@Autowired
private ServiceDAO serviceDao;
@Override
public Map<String, Object> getData() {
Map<String,Object> map = new HashMap<String,Object>();
List<Object> resultSet = service.getData(getSqlSession());
map.put("Test", resultSet.get(0));
map.put("Test2", resultSet.get(1));
return map;
}
public void setServiceDao(final ServiceDAO serviceDao) {
this.serviceDao = serviceDao;
}
}
Die BaseService:
public class BaseService {
@Autowired
private ApplicationContext context;
public SqlSession getSqlSession() {
return (SqlSession)context.getBean("SQL_SESSION");
}
public void setContext(ApplicationContext context) {
this.context=context;
}
}
Die DAO
public class ServiceDAO {
public List<Object> getData(SqlSession sqlSession) {
return sqlSession.selectList("proc_name");
}
}
und die Testklasse:
public class ServiceImplTest {
private Service service;
@Mock
private ServiceDAO serviceDao;
@Before
public void before() {
MockitoAnnotations.initMocks(this);
service = new ServiceImpl();
service.serviceDao = this.serviceDao;
}
@Test
public void testGetData() {
Mockito.when(service.getData()).then(new Answer<List<Object>>() {
@Override
public List<Object> answer(InvocationOnMock invocation) throws Throwable {
return serviceDAO.getData(new DefaultSqlSession(null,null));
}
});
service.getData();
}
}
sein kann @Spy Anmerkung helfen –
der Lage war, diese Arbeit zu bekommen endlich einen Spion mit dank – aarbor
Dank froh, dass es –