我有一个带有构造函数注入的控制器
@RestController
@RequestMapping("/user")
public class MainController {
private final UserMapper userMapper; // autowired by constructor below
public MainController(UserMapper userMapper) {
this.userMapper = userMapper;
}
@RequestMapping("/getChannels")
public String index() {
LoginUser user = userMapper.getUserByName("admin");
return "Channels: " + user.getChannels();
}
}
这是一个运行良好的简单类。但是,当我尝试使用以下类运行 JUnit 测试时,出现错误。
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class MainControllerTest {
private MockMvc mvc;
private final UserMapper userMapper;
public MainControllerTest(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Before
public void setUp() throws Exception {
mvc = MockMvcBuilders.standaloneSetup(new MainController(userMapper)).build();
}
......
错误是:
java.lang.Exception: Test class should have exactly one public zero-argument constructor
我对上面的错误消息感到困惑,我怎么能用零参数构造函数注入 userMapper?我知道可以在 MainController 中为 userMapper 添加@Autowired,但是不建议使用字段注入。请任何人指导我一种适合构造函数注入和 MockMvc 测试的方法。谢谢。