我有一个带有构造函数注入的控制器
@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 测试的方法。谢谢。
其他答案谈论使用注释,但这里你的问题与使用注释没有任何关系。请记住,在 spring 4.3+ 中,您不需要为依赖项注释构造函数,在这里查看更多内容.
事实上,您不需要尝试在测试类中模拟构造函数注入(MainControllerTest
)。
您所需要的只是声明UserMapper
作为应用程序上下文和测试类中的 spring 组件,它将作为正在运行的应用程序自动注入到您的控制器中。
您的错误是什么意思:错误消息显示的所有 Junit Test 类应该有一个公共零参数构造函数这是因为在像您的场景这样的情况下,Junit 测试套件不知道如何实例化测试类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)