亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 mock 對象的 getter() 返回 null?

為什么 mock 對象的 getter() 返回 null?

白衣非少年 2023-05-24 17:42:18
我有一堂課ResolverChainContext:public class ResolverChainContext {  private AWSCredentialsProvider assumeRoleCredentials;}在setup()單元測試(Groovy 和 Spock)中,我用 Mock 填充上面的字段:def setup() {  def ctx = ResolverChainContext.builder().build()  ctx.setAssumeRoleCredentials(Mock(AWSCredentialsProvider.class))}接下來在我的測試用例中,我調用了一個方法getDynamoDBCredentialsV2(),我想v1Credentials從中獲取getDynamoDBCredentials()來自 Mock 對象的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是“Mock for type AWSCredentialsProvider”。getCredentials()在調用它之后,它得到了null。這是因為我錯誤地使用了 Groovy 嗎?我怎樣才能使它v1Credentials成為應該的對象?我應該使用 Mock/Stub 嗎?
查看完整描述

1 回答

?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

AWSCredentialsProvider#getCredentials它返回 null,因為未定義行為。

從 Spock 的基于交互的測試文檔中,當未在模擬對象方法上定義行為時,將返回其默認值,在您的情況下,默認Object值為null

最初,模擬對象沒有任何行為。允許調用它們的方法,但除了返回方法返回類型的默認值(false、0 或 null)外,沒有任何效果。一個例外是 Object.equals、Object.hashCode 和 Object.toString 方法

AWSCredentialsProvider#getCredentials為了克服這個問題,您可能需要定義方法調用的行為stubbing?,如文檔中所述。


查看完整回答
反對 回復 2023-05-24
  • 1 回答
  • 0 關注
  • 235 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號