私は春のブート2.0.0 M2アプリケーションを実行しています。
コンストラクターでautowiredを使用します
@RequestMapping(value = "/rest")
@RestController
public class AddressRestController extends BaseController{
private final AddressService AddressService;
@Autowired
public AddressRestController(final AddressService AddressService) {
this.AddressService = AddressService;
}
...
}
@Service
public class AddressServiceImpl extends BaseService implements AddressService {
@Autowired
public AddressServiceImpl(final AddressRepository AddressRepository) {
this.AddressRepository = AddressRepository;
}
private final AddressRepository AddressRepository;
...
}
public interface AddressRepository extends JpaRepository<Address, Integer>, AddressRepositoryCustom {
}
@Repository
public class AddressRepositoryImpl extends SimpleJpaRepository implements AddressRepositoryCustom {
@PersistenceContext
private EntityManager em;
@Autowired
public AddressRepositoryImpl(EntityManager em) {
super(Address.class, em);
}
...
}
基本的なテストを実行しようとすると
@RunWith(SpringJUnit4ClassRunner.class)
public class AddressServiceTest {
@Autowired
private AddressService service;
@MockBean
private AddressRepository restTemplate;
@Test
public void getAddress(){
MockitoAnnotations.initMocks(this);
Pageable page = PageRequest.of(0, 20);
Page<Address> pageAdr = mock(Page.class);
given(this.restTemplate.findAll(page)).willReturn(pageAdr);
Page<AddressDto> pageDto = service.getAddress(page);
}
}
私はこのエラーを受け取ります
org.springframework.beans.factory.UnsatisfiedDependencyException: 'com.sonos.arcor.service.AddressServiceTest'という名前のBeanの作成中にエラーが発生しました:フィールド 'service'で表現された依存関係が満たされていません;ネストされた例外はorg.springframework.beans.factory.NoSuchBeanDefinitionExceptionです:タイプ '' com.sonos.arcor.service.AddressService 'の適格なBeanがありません:autowire候補として適格なBeanが少なくとも1つ必要です。依存関係アノテーション:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}
このエラーが発生する理由がわかりません。
Springがアプリケーションコンテキストを初期化するように、テストにSpringBootTest
の注釈を付ける必要があります
_@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class AddressServiceTest {
// the remaining test
}
_
また、MockitoAnnotations.initMocks(this);
は必要ありません。
Springはモック処理を処理します
フィールドで[@MockBeanが使用される]と、作成されたモックのインスタンスも注入されます。モックビーンは各テスト方法の後に自動的にリセットされます
モックビーンとスパイビーン を参照してください