Я пишу модульные тесты для сервисного уровня в своем весеннем приложении.
Вот мой класс обслуживанияТестирование модуля с помощью Mockito
@Service
public class StubRequestService implements RequestService {
@Autowired
private RequestDao requestDao;
@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
@Override
public Request getRequest(Long RequestId) {
Request dataRequest = requestDao.find(requestId);
return dataRequest;
}
}
Вот мой тестовый класс
@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(locations = { "/META-INF/spring/applicationContext.xml" })
public class StubRequestServiceTest {
@Mock
public RequestDao requestDao;
StubRequestService stubRequestService; // How can we Autowire this ?
@org.junit.Before
public void init() {
stubRequestService = new StubRequestService(); // to avoid this
stubRequestService.setRequestDao(dataRequestDao);
// Is it necessary to explicitly set all autowired elements ?
// If I comment/remove above setter then I get nullPointerException
}
@Test
public void testGetRequest() {
Request request = new Request();
request.setPatientCnt("3");
when(requestDao.find(anyLong())).thenReturn(request);
assertEquals(stubRequestService.getRequest(1234L).getPatientCnt(),3);
}
}
Its работает нормально, но у меня есть несколько вопросов
- Как мы можем
Autowire
класс обслуживания в тесте? Я использую конструктор в методеinit()
для создания объекта службы. - Нужно ли устанавливать весь элемент
Autowire
для класса обслуживания? Для exStubRequestService
имеют автоподборRequestDao
, который я должен установить явно перед вызовом метода тестирования, иначе он далnullPointerException
, посколькуrequestDao
-null
вStubRequestService.getRequest
. - Каковы хорошие практики, которые следует выполнять при модульном тестировании? (Если я делаю что-то неправильно).
Если вы измените свой вопрос после того, как ответы даны, ответы не имеет смысла больше. Я откажусь от последнего изменения. –
@JB: Извинения за редактирование вопроса. Я просто хотел предоставить правильную и точную информацию. Спасибо – xyz