私はJunitテストを数週間行っています。私の経験は、ジュニアプログラマであるため、かなり限られています。プロジェクトのより簡単なサービスクラスをテストした後、今は頑張っています。私がテストしてい
Junit:私の@Autowiredフィールドでのサービスのテスト
@RunWith(SpringRunner.class)
public class SomeServiceTest {
@Mock
private SomeRepository someRepository;
@InjectMocks
private SomeService someService;
@Test
public void testMyFunc() {
SomeOtherDto param = new SomeOtherDto();
param.setVar1(...);
param.setVar2(...);
Mockito.when(someRepository.getIt()).thenReturn(-1L);
Mockito.when(someService.myPrivBoolBuilder(param,-1L))
.thenReturn(new BooleanBuilder());
Pageable pageable = null;
Page<SomeDto> result = someService.myFunc(param, pageable);
assertEquals(expResult,
}
/* ... */
}
とサービス::
@Service
@Transactional
public class SomeService implements someAbstractService {
private final CustomMapper customMapper
private final SomeRepository someRepository;
private final SomeOtherRepository someOtherRepository;
@Autowired
public SomeService(final CustomMapper customMapper, final SomeRepository someRepository,
final SomeOtherRepository someOtherRepository, etc)
{ /* ... */ }
public Page<SomeDto> myFunc(final SomeOtherDto param, final Pageable pageable) {
final BooleanBuilder predicate = myPrivBoolBuilder(param,
someOtherRepository.getId());
return someRepository.findAll(predicare, pageable).map(obj -> {
return customMapper.map(obj) });
}
public BooleanBuilder myPrivBoolBuilder(final SomeOtherDto param, final Long id) {
BooleanBuilder predicate = new BooleanBuilder();
final QSomeRepository qSomeRepository = QSomeRepository.someRepository;
final QSomeOtherRepository qSomeOtherRepository = QSomeOtherRepository.someOtherRepository();
predicate.and(qSomeRepository.someField.someOtherField.goe(param.getX()));
predicate.and(qSomeRepository.someField2.someOtherField2.isNotNull()));
predicate.and(qSomeOtherRepository.someField.someOtherField.id.eq(id()
.or(qSomeOtherRepository.someField.someOtherField.id.in(...))));
return predicate;
}
/* ... */
}
問題は、私は、私はつまり、テストしていたサービスクラスのコンストラクタにいくつかのprivate final someRepository
を注入することができないということです私の問題は、私がテストを実行するとsomeOtherRepository.getId()
null
とSpringRunner.class
と返すことです。私はMockitoJUnitRunner.class
で実行するとsomeService
コンストラクタは、コンストラクタエラースロー:someRepository is NULL
私は複数の方法を試してみました(、Mockito().doReturn...
構文、@MockBean
、@Spy
などを試してみましたが)、これらは私が手に2つのエラーです。私はそれがMockingフレームワークを正しく使うことの問題だと確信しています。
他のスニペットや詳細が必要な場合は、お気軽にご提供します。
私が試してみましたが、今の問題は、この行です: 'Mockito.when(someService.myPrivBoolBuilder(パラメータ、-1L)) .thenReturn(新BooleanBuilder());' ランタイムエラーが 'ですwhen()には、 '模擬メソッド呼び出し'でなければならない引数が必要です。 –
実際のオブジェクト(someService)でメソッド呼び出しをモックしようとしています。 someRepositoryをモックする必要があります。 – galovics
あなたは正しいです。 私はその関数呼び出しを模擬することができるメソッド( '@ Spy'のようなものですが、その厄介な' SomeRepository'も挿入する)がありますか? –