私は春のアプリケーションでサービスレイヤの単体テストを書いています。ここ
は、ここに私のサービスクラスユニットテスト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);
}
}
その作業罰金が、私が持っているいくつかの質問
- でどのようにすることができ、テストで我々
Autowire
サービスクラス?私はinit()
メソッドでコンストラクタを使用してサービスオブジェクトを作成しています。 - サービスクラスのすべての要素を
Autowire
に設定する必要はありますか? exStubRequestService
の場合は、私が明示的にテストメソッドを呼び出す前に設定する必要があるRequestDao
をautowiredしていなければ、nullPointerException
をrequestDao
としてnull
をStubRequestService.getRequest
メソッドとしています。 - ユニットテストの春のサービスレイヤーに従うと良い習慣は何ですか? (私が何か悪いことをしている場合)。
あなたのテストがきれいになります。最後の編集をロールバックします。 –
@JB:質問を編集する謝罪。私はちょうど正確で正確な情報を提供したかったのです。ありがとう – xyz