更新
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?