我正在为一个应用程序编写junit测试,在尝试测试带有注解的方法时遇到了一个问题 @Preauthorized
.
目标:运行两个测试,一个有适当的角色,一个没有,并成功地获得未经授权的异常。
问题:运行测试 @WithMockUser(authorities = "some-authority")
对测试结果没有影响。就好像 @Preauthorized
注解不存在。
目前我的单元测试设置如下:
@RunWith(SpringRunner.class)
@DataJpaTest
@Sql({"/db/all-schema.sql", "/db/all-data.sql"})
public class MyControllerTest {
@Autowired
private MyRepository myRepository;
private MockMvc mvc;
@Before
public void setUp() {
MyService myService = new MyService(this.myRepository);
MyController myController = new MyController(myService);
MockitoAnnotations.initMocks(this);
this.mvc = MockMvcBuilders.standaloneSetup(myController).build();
}
@Test
@WithAnonymousUser
public void createObject_ShouldFailUnauthorized() throws Exception {
JSONObject requestBody = new JSONObject();
...
MockHttpServletResponse response = mvc.perform(post("/create")
.contentType(MediaType.APPLICATION_JSON)
.content(requestBody.toString())
).andReturn().getResponse();
JSONObject jsonResponse = new JSONObject(response.getContentAsString());
Assert.assertEquals(false, jsonResponse.getBoolean("success"));
...
}
}
进一步解释:
我经营一家 @DataJpaTest
从控制器级别,这样我就可以在一次调用中调用api并测试控制器、服务和存储库方法。
控制器方法用 @PreAuthorize("hasRole('my-role')")
我在 spring-boot-starter-parent
版本2.2.5
当我运行测试时,无论我是否没有用户、匿名用户或正确的用户和角色,测试总是通过,并且我无法让它执行预授权检查。
一定有什么我错过了,但所有的例子我看到网上不包括执行与一个 @DataJpaTest
.
有人能提供更好的见解吗?
暂无答案!
目前还没有任何答案,快来回答吧!