私はsptingブート@WebMvcTest
を持つコントローラ用のユニットを書いています。下記のように春のブートテストでHandlerMethodArgumentResolverを設定する方法
@WebMvcTest
使用し、私はMockMvc
オブジェクトを注入することができるであろう: - コントローラで
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
@WebMvcTest
class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void my_controller_test() throws Exception {
mockMvc.perform(post("/create-user"))
.andExpect(status().isCreated());
}
}
を私はスプリングHandlerMethodArgumentResolver
を用いPrincipal
引数を注入しています。 MockMvc
で単体テストを書く方法を教えてください。私はPrincipal
オブジェクトをコントローラメソッドの引数として注入できます。
は、@WebMvcTest
と注釈されたテストではHandlerMethodArgumentResolver
の豆をスキャンすると説明しています。だから私はHandlerMethodArgumentResolver
を拡張したモックPrincipal
オブジェクトを以下のように作成しました。
@Component
public class MockPrincipalArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(Principal.class);
}
@Override
public Object resolveArgument(MethodParameter parameter...) throws Exception {
return new MockPrincipal();
}
}
しかし、引き続き引数MockPrincipal
がコントローラメソッドに渡されていません。
春のブートバージョン: - 1.4.5.RELEASE
追加する 'HandlerMethodArgumentResolver'を作成しないで、作成しているリクエストにプリンシパルを指定する必要があります。 'post(/ your-url).principal(新しいMockPrincipal())'です。 –
ありがとうございました。私は時間を無駄に他のオプションを探して無駄になりました:)。あなたが気にしないなら、それが文書化されているところで言及してください? – Manu