【发布时间】:2016-10-24 19:34:48
【问题描述】:
我在服务中使用自动装配的构造函数,当在测试类中实例化该构造函数时,会导致 @Value 注释返回 null。自动装配依赖关系直接解决了这个问题,但项目遵循使用基于构造函数的自动装配的约定。我的理解是,在测试类中实例化服务并不是从导致 @Value 返回 null 的 Spring IoC 容器创建它。有没有一种方法可以使用基于构造函数的自动装配从 IoC 容器创建服务,而无需直接访问应用程序上下文?
示例服务:
@Component
public class UpdateService {
@Value("${update.success.table}")
private String successTable;
@Value("${update.failed.table}")
private String failedTable;
private UserService userService
@Autowired
public UpdateService(UserService userService) {
this.userService = userService;
}
}
示例测试服务:
@RunWith(SpringJUnite4ClassRunner.class)
@SpringApplicationConfiguration(classes = {TestApplication.class})
@WebAppConfiguration
public class UpdateServiceTest {
private UpdateService updateService;
@Mock
private UserService mockUserService;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
updateService = new UpdateService(mockUserService);
}
}
【问题讨论】:
-
如果你有一个
UpdateServicebean,只需@Autowired它。 -
不幸的是,这对我没有帮助,因为我需要能够在测试类中使用模拟对象构造 UpdateService。
-
对,错过了。查看here 以获取提示。
标签: java spring mockito autowired spring-test