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

如何打电话给莫基托。用私有方法给出

黄弘新
2023-03-14

我找到了使用ReflectionUtils的方法

Method myMethod=ReflectionUtils.findMethod(myMockClass.getClass(), "myMethod", myArg.class)

现在我想驱动这个方法返回一个指定的值。通常,如果< code>myMethod是公共的,我会写例如

given(myMockClass.myMethod(myArg)).willReturn(5)

但是有没有可能用私有的myMethod来实现呢?< br >当我打电话时

given(myMethod.invoke(myClass, myArg)).willReturn(5)    

我有Java . lang . reflect . invocationtargetexception .我读过关于PowerMock的文章,但是我想知道是否只有Mockito才有可能

编辑:

public int A(args){
  int retValue;
  ... some code here, the most important part
  retValue=..
  if(some case)
      retValue= myMethod(args);
  return retValue;
}

共有3个答案

彭华皓
2023-03-14

不要犹豫,将方法可见性更改为受保护的包,即使它仅用于测试目的(通常是因为您想要测试该方法或因为您想要模拟它)。不过,您应该明确指出这一事实,一个好方法是使用注释(请参阅此答案)。

张锐藻
2023-03-14

我建议你不要做这件事。如果你需要模仿私有方法的行为,那么你的设计就有问题。你的类是不可测试的。

因为解决方法是使方法包私有化,并在同一个包中测试它。这将起作用,但也不被视为良好做法。

我建议阅读这篇最新的叔叔鲍勃文章

闻人景澄
2023-03-14

考虑在此处使用Guava的@VisibleForTest注释。基本上,只需将方法的可见性提高到测试它所需的最低级别。

例如,如果原始方法是:

private int calculateMyInt() {
  // do stuff
  return 0;
}

你的新方法是:

@VisibleForTesting // package-private to call from test class.
int calculateMyInt() {
  // do stuff
  return 0;
}
 类似资料:
  • 我有一个较大的代码库,包含许多装饰器类,它们通常将除一个方法外的所有方法委托给一个委托对象,例如: 现在,我正在使用Junit 5为这些包装创建单元测试,调用上的每个方法,并希望验证包装委托上是否有调用,这是一个Mockito mock。 以下是我目前的代码: 当我运行这个,我得到的错误是: 我是否做错了什么,或者如果您不知道确切的方法,是否无法验证方法调用?

  • 我正在使用Powermock为Jersey web服务构建测试用例,并试图模拟数据库函数调用,特别是PUT和POST调用。然而,我在这方面遇到了一些问题。 下面是其中一个web服务调用的样子: 以及我的测试用例当前的样子: 当运行时,这给了我一个断言错误: 意外的方法调用WebService。runUpdateQuery(“exec spInsertApplication,[“测试服务名称”,空,

  • 我在这里阅读了Twilio电话教程:https://www.fullstackpython.com/blog/make-phone-calls-python.html 与Twilio教程不同,Twilio教程确实会叫我的手机,但它只播放MP3或人工智能语音。我希望能够进行对话。有没有办法用Twilio API连接我电脑的麦克风并与自己的手机通话?我一直在网上搜索,却找不到办法。请帮忙。

  • Mockito似乎是一个非常好的Java存根/模拟框架。唯一的问题是我找不到任何关于使用API的最佳方法的具体文档。测试中使用的常用方法包括: 当您在实践中看到Mockito的示例时,您会看到如下代码: 从我读过的所有文档中,我已经识别了几个Mockito“语法”的“模式”,这些“语法”是通过将这些方法调用像上面的示例一样链接在一起而获得的。我发现的一些常见模式有: 当/然后:当(你的方法())。

  • 我对莫基托有疑问。我想测试这个简单的类: 我写了这个简单的测试: 此测试运行时没有错误。我等待它没有编译,因为没有任何对userService方法的调用…

  • 背景: 我为android写了一个简单的小拨号器,可以拨打联系人的电话号码 问题: 我想打电话给联系人,而不是电话号码,这样Android: 如果联系人有两个号码:将启动电话号码选择对话框,然后启动通话 当然,我可以从头开始实现一个弹出窗口,但我更愿意委托给一个标准操作,这样用户就可以使用与使用标准拨号器相同的用户体验。