鉴于我具有以下ReactiveJwtDecoder的自定义实现:
@Component
public class CustomReactiveJWTDecoder implements ReactiveJwtDecoder
然后我写一个像这样的测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class AzureADConfigTest {
@Autowired
private ApplicationContext context;
private WebTestClient client;
@MockBean
AzureADService azureADService;
@MockBean
CustomReactiveJWTDecoder decoder;
@Before
public void setUp() {
Jwt jwt = createJwt();
UsernamePasswordAuthenticationToken user = new UsernamePasswordAuthenticationToken(new User("test@user.se", "", AuthorityUtils.commaSeparatedStringToAuthorityList("A_AD")), "", AuthorityUtils.commaSeparatedStringToAuthorityList("A_AD"));
when(decoder.decode(anyString())).thenReturn(Mono.just(jwt));
when(azureADService.getUserInfo(any())).thenReturn(Mono.empty());
client = WebTestClient.bindToApplicationContext(context).build();
}
@Test
public void azureAdAccessGrated() {
client
.get()
.uri("/api/userinfo")
.header("Authorization", "Bearer " + "token")
.exchange()
.expectStatus()
.isOk();
}
}
该模拟不被尊重。如果我在我的原始impl中放置一个断点,那么该代码将被执行而不是模拟。
我的问题是:
我在使用Spring Boot Security Resource Server时如何模拟ReactiveJWTDecoder
?有很多建议,但没有一个像创建一个@MockBean
那样简单。