У меня есть контроллер с внедрением конструктора
@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 с конструктором без аргументов? Я знаю, что можно добавить @Autowired для userMapper в MainController, однако внедрение поля не рекомендуется. Пожалуйста, может ли кто-нибудь указать мне подходящий способ как для внедрения конструктора, так и для тестирования MockMvc. Спасибо.