A ja poprosze o kod który ma sens... Bo np. po co ten if w metodzie skoro absolutnie na nic nie wpływa? o_O Równoważny jest zapis:
public List<IsbnDbV2DataBaseDirectoryModel> getAllDirectory()throws IsbnDbV2DataBaseServiceException {
List<IsbnDbV2DataBaseDirectoryModel> result = new ArrayList<IsbnDbV2DataBaseDirectoryModel>();
try {
result = isbnDbV2DataBaseDirectoryModelDao.getAll();
} catch(Exception e) {
throw new IsbnDbV2DataBaseServiceException("Powstal blad podczas pobierania elementów ze slownika : "+e.getMessage());
}
return result;
}
Poza tym łapanie Exception
albo rzucanie NullPoitnerException
to jest jakaś masakra i WTF tygodnia. I jeszcze zwracanie nulli z tych metod, żeby potem robić takie ifologie. Dramat.
Testy dla takiej metody muszą być 2. Jeden dla poprawnego wywołania, drugi kiedy leci wyjątek. Możesz się tu bawić w użycie testowego kontekstu springa, ale jako że prosiłeś tylko o proste testy... Użyje EasyMock a nie Mockito, bo bardziej go lubie, ale zapis będzie analogiczny. Nie wiem jak sie nazywa klasa w której to siedzi więc będzie MyClass
@Test
public void testGetAllDirectory(){
MyClass classUnderTest = new MyClass();
IsbnDbV2DataBaseDirectoryModelDao mockDao = createNiceMock(IsbnDbV2DataBaseDirectoryModelDao.class);
classUnderTest.setDao(mockDao); //jak nie ma settera to można przez Whitebox to zrobić zawsze
List<IsbnDbV2DataBaseDirectoryModel> expectedResult = new ArrayList<IsbnDbV2DataBaseDirectoryModel>();
expect(mockDao.getAll()).andReturn(expectedResult).once();
replayAll();
List<IsbnDbV2DataBaseDirectoryModel> result = classUnderTest.getAll();
verifyAll();
assertEqual(result, expectedResult);
}
Analogicznie dla testu z wyjątkiem:
@Test(expected = IsbnDbV2DataBaseServiceException.class)
public void testGetAllDirectory(){
MyClass classUnderTest = new MyClass();
IsbnDbV2DataBaseDirectoryModelDao mockDao = createNiceMock(IsbnDbV2DataBaseDirectoryModelDao.class);
classUnderTest.setDao(mockDao); //jak nie ma settera to można przez Whitebox to zrobić zawsze
expect(mockDao.getAll()).andThrow(new JakiśtamWyjątek()).once();
replayAll();
List<IsbnDbV2DataBaseDirectoryModel> result = classUnderTest.getAll();
}
Generalnie taki jest zawsze schemat testu.
- Ustawianie parametrów testu, tworzenie mocków i ustalanie spodziewanego zachowania.
- replay mocków + wywołanie faktycznej metody którą testujesz
- verify mocków + asercje które sprawdzają czy efekt jest taki jakiego się spodziewałeś. Oczywiście jak leci wyjątek to ten krok załatwia automatycznie oczekiwanie wyjątku na poziomie JUnit.