【发布时间】:2019-08-10 03:13:26
【问题描述】:
我有一堂课ResolverChainContext:
public class ResolverChainContext {
private AWSCredentialsProvider assumeRoleCredentials;
}
在单元测试(Groovy 和 Spock)的 setup() 中,我用 Mock 填充上述字段:
def setup() {
def ctx = ResolverChainContext.builder().build()
ctx.setAssumeRoleCredentials(Mock(AWSCredentialsProvider.class))
}
接下来在我的测试用例中,我调用一个方法getDynamoDBCredentialsV2(),我想从getDynamoDBCredentials() 中获取v1Credentials,它来自setup() 步骤中的Mock 对象:
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;
}
问题是我会为v1Credentials 得到null。
当我调试它时,roleCredentials 的类型是“Mock for type AWSCredentialsProvider”。在调用getCredentials() 之后,它会得到null。
这是因为我以错误的方式使用 Groovy 吗?我怎样才能使v1Credentials 成为它应该是的对象?我应该使用 Mock/Stub 吗?
【问题讨论】:
标签: java unit-testing groovy aws-sdk spock