我有一堂課ResolverChainContext:public class ResolverChainContext { private AWSCredentialsProvider assumeRoleCredentials;}在setup()單元測(cè)試(Groovy 和 Spock)中,我用 Mock 填充上面的字段:def setup() { def ctx = ResolverChainContext.builder().build() ctx.setAssumeRoleCredentials(Mock(AWSCredentialsProvider.class))}接下來在我的測(cè)試用例中,我調(diào)用了一個(gè)方法getDynamoDBCredentialsV2(),我想v1Credentials從中獲取getDynamoDBCredentials()來自 Mock 對(duì)象的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;}問題是我會(huì)得到null的v1Credentials。當(dāng)我調(diào)試它時(shí),類型roleCredentials是“Mock for type AWSCredentialsProvider”。getCredentials()在調(diào)用它之后,它得到了null。這是因?yàn)槲义e(cuò)誤地使用了 Groovy 嗎?我怎樣才能使它v1Credentials成為應(yīng)該的對(duì)象?我應(yīng)該使用 Mock/Stub 嗎?
1 回答

幕布斯6054654
TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
AWSCredentialsProvider#getCredentials
它返回 null,因?yàn)槲炊x行為。
從 Spock 的基于交互的測(cè)試文檔中,當(dāng)未在模擬對(duì)象方法上定義行為時(shí),將返回其默認(rèn)值,在您的情況下,默認(rèn)Object
值為null
最初,模擬對(duì)象沒有任何行為。允許調(diào)用它們的方法,但除了返回方法返回類型的默認(rèn)值(false、0 或 null)外,沒有任何效果。一個(gè)例外是 Object.equals、Object.hashCode 和 Object.toString 方法
AWSCredentialsProvider#getCredentials
為了克服這個(gè)問題,您可能需要定義方法調(diào)用的行為stubbing
?,如文檔中所述。
添加回答
舉報(bào)
0/150
提交
取消