当前位置: 首页 > 面试题库 >

链接呼叫的模拟或存根

江同化
2023-03-14
问题内容
protected int parseExpire(CacheContext ctx) throws AttributeDefineException {
    Method targetMethod = ctx.getTargetMethod();
    CacheEnable cacheEnable = targetMethod.getAnnotation(CacheEnable.class);
    ExpireExpr cacheExpire = targetMethod.getAnnotation(ExpireExpr.class);
    // check for duplicate setting
    if (cacheEnable.expire() != CacheAttribute.DO_NOT_EXPIRE && cacheExpire != null) {
        throw new AttributeDefineException("expire are defined both in @CacheEnable and @ExpireExpr");
    }
    // expire time defined in @CacheEnable or @ExpireExpr
    return cacheEnable.expire() != CacheAttribute.DO_NOT_EXPIRE ? cacheEnable.expire() : parseExpireExpr(cacheExpire, ctx.getArgument());
}

那是测试的方法

Method targetMethod = ctx.getTargetMethod();
CacheEnable cacheEnable = targetMethod.getAnnotation(CacheEnable.class);

我必须模拟三个CacheContext,Method和CacheEnable。有什么想法可以使测试用例更加简单吗?


问题答案:

Mockito 可以处理链接的存根:

Foo mock = mock(Foo.class, RETURNS_DEEP_STUBS);

// note that we're stubbing a chain of methods here: getBar().getName()
when(mock.getBar().getName()).thenReturn("deep");

// note that we're chaining method calls: getBar().getName()
assertEquals("deep", mock.getBar().getName());

AFAIK,链中的第一个方法返回一个模拟,该模拟被设置为在第二个链式方法调用中返回您的值。

Mockito的作者注意到,这 仅应用于遗留代码
。否则,更好的方法是将行为推送到CacheContext并提供完成工作本身所需的任何信息。您从CacheContext中获取的信息量表明您的类具有令人羡慕的功能。



 类似资料:
  • 问题内容: 我正在尝试模拟一些基于反射的方法。您可以在下面看到详细信息, 被测课程 测试 } 要么 但是,测试失败,并显示NullPointerException。我知道我在嘲笑概念上做错了什么,但是我不明白这是什么。您能否对此加以说明,并建议我如何测试此方法? 谢谢。 问题答案: 您需要一个Method对象和一个Class对象。根据您的评论,Mockito无法模拟方法,因此您需要一个真正的方法。

  • 问题内容: 我想使用Mockito测试下面的(简化)代码。我不知道如何告诉Mockito第一次失败,然后第二次成功。 我可以通过以下方式设置成功测试: 以及失败测试: 但是,如何测试一次失败(或两次)然后成功,就可以了吗? 问题答案: 从文档: 有时,对于同一方法调用,我们需要对不同的返回值/异常进行存根。典型的用例可能是模拟迭代器。Mockito的原始版本没有此功能来促进简单的模拟。例如,可以使

  • 问题内容: 我要尝试测试其呼叫顺序的三个功能。 假设在模块module.py中,我有以下内容 我想检查b在a之后和c之前被调用。因此,对a,b和c中的每一个进行模拟都是容易的: 检查每个单独的模拟都被调用也很容易。如何检查呼叫相对于彼此的顺序? 将无法使用,因为每个模拟都单独维护。 我尝试使用副作用来记录每个调用: 但这仅给我提供了与模拟一起调用的args,而没有给实际调用的模拟。我可以添加更多逻

  • 我目前正在使用twilio和laravel进行自动面试。我想实现的是类似于此场景的东西: 用户在网络上输入电话号码 Twilio将发送带有链接的短信(链接将在一个小时或更长时间内过期) 单击链接将向用户发起出站呼叫 自动面试将开始。 这在Twilio可行吗?这是我第一次使用它。 谢谢你

  • 问题内容: 我想链接异步的REST服务调用,并在完成时具有单个回调。 番石榴有可能吗? 问题答案: 您可以将s 用于链接: 在终端中以上代码的输出:

  • 使用Twilio Studio和我们的流设置为“连接呼叫到”小部件一个通用电话,除非输入了分机,然后“连接呼叫到”小部件一个人的桌面电话,这是使用“基于拆分”小部件。当用户不拿起他们的电话和超时发生时,问题就会发生。流如何将用户发送回Twilio“记录语音邮件”小部件?