私はクラスを持っていますResolverChainContext
:
public class ResolverChainContext {
private AWSCredentialsProvider assumeRoleCredentials;
}
そして、でsetup()
ユニットテスト(Groovyとスポック)において、Iは、モックと上記フィールドに移入します。
def setup() {
def ctx = ResolverChainContext.builder().build()
ctx.setAssumeRoleCredentials(Mock(AWSCredentialsProvider.class))
}
私のテストケースでは次に、私はメソッドを呼び出しgetDynamoDBCredentialsV2()
、私が取得したいv1Credentials
からgetDynamoDBCredentials()
でモックオブジェクトから来ているsetup()
のステップを:
public interface AWSCredentialsProvider {
AWSCredentials getCredentials();
void refresh();
}
protected AWSCredentialsProvider getDynamoDBCredentials() {
final AWSCredentialsProvider fasCredentials = resolverChainContext.getFasCredentials();
final AWSCredentialsProvider roleCredentials = resolverChainContext.getAssumeRoleCredentials();
if (null == fasCredentials || !invokerConfig.isUseCallerCredentials()) {
return roleCredentials;
} else {
return fasCredentials;
}
}
protected AwsCredentialsProvider getDynamoDBCredentialsV2() {
AWSCredentials v1Credentials = getDynamoDBCredentials().getCredentials();
blahblahblah;
}
問題は、私が得るあるnull
ためv1Credentials
。
私はそれをデバッグするとき、のタイプはroleCredentials
「タイプAWSCredentialsProviderためのモック」です。そして、呼び出した後getCredentials()
、その上に、それが取得しますnull
。
私は間違った方法でのGroovyを使用しているので、これはですか?どのように私は作ることができv1Credentials
、それがあるべきオブジェクトを?私はモック/スタブを使用する必要がありますか?
それはのために行動するので、ヌルを返しますAWSCredentialsProvider#getCredentials
定義されていません。
ドキュメントから相互作用ベースのテスト動作が嘲笑オブジェクトメソッドに定義されていない場合、そのデフォルト値はのためのあなたのケースのデフォルト値では、返されるスポックの、Object
ISnull
最初に、モックオブジェクトは何の行動を持っていません。それらのメソッドを呼び出すと、許可されますが、メソッドの戻り値の型(偽、0、またはnull)のデフォルト値を返す以外には効果がありません。例外ははObject.equals、Object.hashCode、およびObject.ToStringをメソッドです
これを克服するために、あなたはのための動作を定義したい場合がありますAWSCredentialsProvider#getCredentials
使用してメソッド呼び出しstubbing
ドキュメントで説明したように。