【发布时间】:2020-01-10 09:34:27
【问题描述】:
我正在通过自定义过滤器使用 JWT 身份验证,该过滤器使用多个 @Services。
像这样
@Component
public class JwtAuthentiationFilter extends OncePerRequestFilter {
private final UserService;
...
}
(我在构造函数中自动装配服务)
现在,我有一个要测试的控制器:
@RestController
@RequestMapping(...)
public class COmputerDeviceController {
@GetMapping
@PreAuthorize("hasAuthority('devices)")
public List<Device> getDevices() {
...
}
}
我想测试控制器和安全性,如下所示:
@RunWith(SpringRunner.class)
@WebMvcTest(ComputerDeviceController.class)
public class ComputerDeviceControllerTest {
@Autowired
private MockMvc mvc;
@WithMockUser
@Test
public void test() throws Exception {
...
}
}
问题源于过滤器的使用 - 尝试运行测试时,我得到 NoSuchBeanDefinitionException(没有可用的 UserService 类型的合格 bean)
我知道我可以将它作为集成测试运行,但实际上它只是测试控制器,除了自定义过滤器和 Spring Security 之外,没有必要这样做。
我该如何解决这个问题?我尝试了不同的解决方案,例如添加@ComponentScan.Filter,并手动包含依赖项,但最后我必须提供entitymanager,这似乎不对。
【问题讨论】:
标签: spring-boot spring-security dependency-injection spring-test spring-boot-test