当前位置: 首页 > 知识库问答 >
问题:

为什么mock对象的getter()返回null?

宗政霄
2023-03-14
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()步骤中的模拟对象:


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

这是因为我以错误的方式使用Groovy吗?如何使V1Credentials成为它应该成为的对象?我应该使用mock/stub吗?

共有1个答案

阴礼骞
2023-03-14

它返回null,因为awscredentialsProvider#getCredentials的行为没有定义。

在Spock的基于交互的测试文档中,当未在模拟对象方法上定义行为时,将返回其默认值,在您的示例中,object的默认值为null

最初,模拟对象没有任何行为。允许调用它们的方法,但除了返回方法返回类型的默认值(false、0或null)之外,没有其他影响。Object.Equals、Object.HashCode和Object.ToString方法是一个例外

 类似资料:
  • 当某个对象具有装箱类型属性时,该属性的getter返回。但是这应该返回,因为boxed type属性的默认值是。这里有什么问题?

  • 在C++98中,以下代码无法编译,因为ifstream没有复制构造函数: 但是,在C++11中使用多个GCC版本时,编译时不会出现警告。这是什么原因?

  • 本文向大家介绍jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?相关面试题,主要包含被问及jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?时的应答技巧和注意事项,需要的朋友参考一下 [jQuery] jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?

  • 首先,我收到来自post string属性和来自控制器的inputStream。 接下来,我的服务调用ParseGeojosnStream以流式传输文件的内容。 接下来,传递特性的名称和列表,并将其插入表中。 最后,使用字符串属性和表名作为id创建scheme。 那么,当强制转换为json并将其存储在数据库中时,为什么要返回一个空的属性对象呢? 代码如下: log.info(“jsonGeomet

  • 我正在搜索文档中的contacts数组中包含特定_ID的文档。下面是结构: 它执行与$elemmatch查询相同的操作。 我可能错过了一些非常基本的东西,但如果你们能提供一些建议,我将非常感谢。

  • 问题内容: 我们正在开发对延迟敏感的应用程序,并且已经对各种方法(使用jmh)进行了微基准测试。在对基准测试方法进行微基准测试并对结果满意之后,我实现了最终版本,但发现最终版本比我基准测试的 速度慢 了 3倍 。 罪魁祸首是所实现的方法正在返回一个对象而不是一个对象。这是基准代码的简化版本: 以上基准测试结果: 只需更改函数的返回类型,就可以将性能提高近三倍。 我认为返回枚举对象与整数之间的唯一区