我正在尝试为 REST 控制器编写一个单元测试,该控制器通过 Resource assembler 类生成 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