如何模拟传递给Spring MVC Controller的参数

时间:2018-10-20 22:17:14

标签: spring spring-boot testing mocking

更新

LdapService的注入未按预期进行。 Spring正在创建新实例,但是该对象不参与托管Bean的常规DI生命周期。例如,@PostConstruct中的@Value方法或LdapService批注确实会被调用/注入。因此,我假设Spring只是根据模型bean创建实例,而不是就托管bean而言。

因此,关于此对象模拟的整个问题已过时。

更新结束

如何模拟作为参数传递给Spring MVC Controller的服务?

应该被嘲笑的服务。在我的场景中,作用域“原型”很重要:

@Service
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class LdapService {
    ...
}

Spring MVC控制器:

@RestController
public class SomeController {
    @GetMapping("/something")
    public ResponseEntity<Void> doSomething(
            @Valid @RequestBody SomeDTO someDTO,
            @Autowired LdapService ldapService) {
        ldapService.invokeSomeMethod(someDTO.getName());
        return ResponseEntity.ok().build();
    }
}

测试:

@RunWith(SpringRunner.class)
@WebMvcTest(PasswordController.class)
public class SomeControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @Test
    public void doSomeTest() throws Exception {
        // In the following call, a mocked LdapService shall be used!
        mockMvc.perform(get("/something"));

在此示例中如何模拟LdapService?

0 个答案:

没有答案