我正在嘗試爲通過資源彙編程序類生成HATEOAS鏈接的REST控制器編寫單元測試。生產中一切正常,但通過單元測試資源彙編程序類不會被注入到控制器中。Spring HATEOAS資源彙編器未在單元測試中實例化
我的資源彙編類:
@Component
public class ModelResourceAssembler extends ResourceAssemblerSupport<Model, ModelResource> {
public ModelResourceAssembler() {
super(ModelRestController.class, ModelResource.class);
}
@Bean
public ModelResourceAssembler modelResourceAssembler(){
return new ModelResourceAssembler();
}
@Override
public ModelResource toResource(Model model) {
...
}
}
控制器是:
@Controller
@RequestMapping("/demo")
@ComponentScan(basePackages = {"com.foo.demo"})
public class ModelRestController {
@Autowired
private ModelPersistenceHandler modelPersistenceHandler;
@Autowired
private ModelResourceAssembler modelResourceAssembler;
...
}
而且單元測試:
@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes= {ModelResourceAssembler.class, ModelRestController.class})
public class ModelRestControllerTest {
private MockMvc mockMvc;
@InjectMocks
private ModelRestController modelRestController;
@Mock
private ModelPersistenceHandler modelPersistenceHandler;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(modelRestController).build();
}
...
}
不管我做什麼的ModelResourceAssembler實例總是空值。由於應用程序是Spring Boot,它沒有WebCoonfig類,自動裝配的WebApplicationContext始終爲空,所以我不能(因爲我正在運行單元測試而不想)因爲通過webAppContextSetup實例化MockMvc
使用SpringJUnit4ClassRunner的問題是在Mockito注入模擬前實例化所有的bean。在我的情況下,真正的modelPersistenceHandler而不是它的模擬被實例化,並且測試立即失敗,因爲modelPersistenceHandler試圖與數據庫交談。 – MrkK 2014-09-13 15:10:42
@MrkK如果您使用模擬** bean(!)**替換它,請不要使用它。無論如何,目前的問題在第一段中解釋。第二個只是一個建議。 – zeroflagL 2014-09-13 15:15:43