我在測試類中實例化時導致@Value註釋返回null的服務中使用自動裝配構造函數。自動裝配依賴關係直接解決了問題,但該項目遵循使用基於構造函數的自動裝配的約定。我的理解是,在測試類中實例化服務不是從Spring IoC容器創建的,它導致@Value返回null。有沒有辦法使用基於構造函數的自動裝配從IoC容器創建服務,而無需直接訪問應用程序上下文?Spring @Autowired構造函數在測試類中實例化時使@Value返回null
示例服務:
@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);
}
}
如果你有'UpdateService' bean,只需'@ Autowired'它。 –
不幸的是,這並不能幫助我,因爲我需要能夠在測試類中使用模擬對象構建UpdateService。 – Alex
對,錯過了。看看[這裏](http://stackoverflow.com/questions/2457239/injecting-mockito-mocks-into-a-spring-bean)提示。 –