测试期间不满意的依赖性

时间:2017-07-13 18:43:54

标签: spring-boot spring-boot-test

我有一个运行良好的Spring Boot 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:   使用名称创建bean时出错   'com.sonos.arcor.service.AddressServiceTest':不满意的依赖   通过“服务”字段表达;嵌套异常是   org.springframework.beans.factory.NoSuchBeanDefinitionException:没有   “com.sonos.arcor.service.AddressService”类型的限定bean   可用:预计至少有1个符合autowire资格的bean   候选人。依赖注释:   {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}

我不明白为什么会收到此错误。

1 个答案:

答案 0 :(得分:9)

您需要使用SpringBootTest注释测试,以便spring初始化应用程序上下文

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class AddressServiceTest {
// the remaining test
}

此外,您不需要MockitoAnnotations.initMocks(this);

Spring负责模拟处理

  

当在字段上使用[@MockBean]时,创建的模拟的实例也将是   注射。在每种测试方法

之后,模拟豆会自动重置

请参阅Mocking and spying beans