私たちは春の oauth を使用しており、継承を使用する必要がある場所がいくつかあります。
当面のケースでは、TokenEndpoint を拡張しています
public class MyTokenEndpoint extends TokenEndpoint {
//...
public ResponseEntity<OAuth2AccessToken> getAccessToken(
Principal principal,
MyParams myParams,
@RequestParam Map<String, String> allParams) {
// .. Stuff Happens
updateParamsWithStuff(allParams);
return super.getAccessToken(
principal, myParams.grantType(), allParams);
}
//...
}
ここでテストしたいのは、super.getAccessToken に渡されたマップが Stuff で満たされているかどうかです。私の簡単な方法は、渡されたマップをスパイすることでしたが、これは実装の詳細に依存しており、super.getAccessToken に渡されたマップにものが含まれていることを実際に保証するものではありません。
私たちは Mockito を使用していますが、これは機能しないというコメントと、機能する可能性があることを示唆するコメントを見てきました。これは、どのモッキング フレームワークでも実行できますか?
両方の回答を参照してください ( Can I mock a superclass's constructor with Mockito/Powermock?、チェックされたものは不可能と言っていますが、2番目の回答に関する議論を考えると、試してみました。)
それを読んだ後、私は次のことを試しました:
MyTokenEndpoint spyEndpoint = Mockito.spy(endpoint); //endpoint Set-up previously
Mockito.doAnswer(new Answer<ResponseEntity<OAuth2AccessToken>>() {
@Override
public ResponseEntity<OAuth2AccessToken>
answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Map<String, String> params = (Map<String, String>) args[2];
System.out.printf("%s\n", params.toString());
return new ResponseEntity<OAuth2AccessToken>(HttpStatus.ACCEPTED);
}
}).when(((TokenEndpoint) spyEndpoint))
.getAccessToken(any(Principal.class),
anyString(), (Map<String, String>) anyMap());
theResponse = spyEndpoint
.getAccessToken(principal,
myPrams,
currentMap);
しかし、答えのコードは決して呼び出されません。
私は間違った木を吠えていますか?? これはどのモッキングフレームワークでも可能ですか?