首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何模仿一个真正的类?

如何模仿一个真正的类?
EN

Stack Overflow用户
提问于 2012-11-20 03:39:12
回答 2查看 150关注 0票数 2

我想在TestNG测试用例中模拟一个具体的类。类可以如下所示(简化示例):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Example() {

  private MyHello myHello;

  public Example(MyHello myHello) {
    this.myHello = myHello;
  }

  public String doSomething() {
    return myHello.doSomethingElse();
  }
}

现在我们要模拟Example返回一些定义的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@BeforeMethod
public void setUp() {
  this.example = mock(Example.class);
  when(this.example.doSomething()).thenReturn("dummyValue");
}

安装方法的最后一行调用Example实例上的方法,这个实例没有通过构造函数获得一个MyHello,所以我在setup方法中得到了一个NPE。

是否有一种方法可以在创建模拟的同时注入MyHello,或者不允许Mockito在实际实例上调用该方法?

编辑

导致观察到的行为的问题是,doSomething()方法实际上是final__。当我试图解决这个问题时,我忽略了这一点。https://stackoverflow.com/a/3794448/105224。所以我要么取消期末考试,要么为那堂课提取一个界面。

EN

回答 2

Stack Overflow用户

发布于 2012-11-20 03:50:16

看看使用doReturn("dummy").when(example).doSomething()是否有效果。

Mockito.doReturn

来自JavaDoc:

在一些罕见的情况下使用doReturn(),当您不能使用时(对象)。请注意,始终建议何时(Object)进行阻塞,因为它是参数类型安全且更具可读性的(特别是在阻塞连续调用时)。 下面是doReturn()派上用场的罕见场合:

  1. 当监视真实的对象和调用间谍的真实方法时,会带来副作用。 List =新的LinkedList(); 间谍=间谍; //不可能:调用spy.get(0)可以在(spy.get(0)).thenReturn(“foo”)时抛出IndexOutOfBoundsException (列表仍为空); //您必须使用doReturn()来保存:doReturn(“foo”).when(间谍).get(0);
票数 2
EN

Stack Overflow用户

发布于 2012-11-20 05:33:49

您可以使用spy关键字而不是mock

就我而言,从Mockito的文档来看,您可以对间谍进行部分模拟。

要获得详细的解释,您可以从它的文档中的主题13中受益。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13472392

复制
相关文章
为什么 strace 在 Docker 中不起作用?
在编辑“容器如何工作”爱好者杂志的能力页面时,我想试着解释一下为什么 strace 在 Docker 容器中无法工作。
用户8639654
2021/09/18
6.4K0
在bootstrap中col-md-offset-* 偏移不起作用
在bootstrap中,使用col-md-offset-1、col-md-offset-2、col-md-offset-3、col-md-offset-4等来设置偏移量很常见,但最近就遇到一个问题了,在最新版的bootstrap4.5中,这个值不起作用了。
kirin
2020/10/27
12.6K1
在nodejs中事件循环分析
在上一篇文章在chromev8中的JavaScript事件循环分析中分析到,在chrome中的js引擎是通过执行栈和事件队列的形式来完成js的异步操作。然而在node中,事件循环表现出的状态与浏览器中大致相同。不同的是node中有一套自己的模型。node中事件循环的实现是依靠的libuv引擎。我们知道node选择chrome v8引擎作为js解释器,v8引擎将js代码分析后去调用对应的node api,而这些api最后则由libuv引擎驱动,执行对应的任务,并把不同的事件放在不同的队列中等待主线程执行。 因此实际上node中的事件循环存在于libuv引擎中。
Yerik
2022/04/11
4K0
List.append() 在 Python 中不起作用,该怎么解决?
Python 是一种强大而灵活的编程语言,它提供了许多方便的数据结构和操作方法,其中之一就是列表(List)。列表是一个有序的集合,可以包含不同类型的元素,并且可以进行添加、删除和修改等操作。在 Python 中,我们通常使用 List.append() 方法向列表末尾添加元素。然而,在某些情况下,你可能会遇到 List.append() 方法不起作用的问题。本文将详细讨论这个问题并提供解决方法。
网络技术联盟站
2023/06/01
2.7K0
C++核心准则ES.86:避免在基本for循环的循环体中修改循环控制变量​
ES.86: Avoid modifying loop control variables inside the body of raw for-loops
面向对象思考
2020/06/11
1.8K0
c# 中for和foreach循环的区别
    (2)效率比for要高(C#是强类型检查,for循环对于数组访问的时候,要对索引的有效值进行检查)
vv彭
2020/10/27
4.9K0
c# 中for和foreach循环的区别
EasyC++19,C++中的for循环
在编程当中我们经常会遇到需要重复执行的步骤,想要让计算机能够重复执行某些逻辑,就需要使用循环。
TechFlow-承志
2022/08/26
5130
如何提高C++中for循环的效率
1. 不假思索的写法(最为常见,且最耗时) 测试用时:0.000143s clock_t startTime,endTime; startTime = clock(); vector<double> row(100); double sum=0; for(unsigned int i=0;i<1000;i++) { for(unsigned int j=0;j<row.size();j++) {
用户9831583
2022/06/16
1.9K0
[常见问题]在Linux下执行Redis命令不起作用.
redis 127.0.0.1:6379> 这个后面无论输入什么命令都没有返回 ok 或者其他的信息,一直保持截图的状态: 解决方法: 在SecureCRT中设置Options-->SessionO
一枝花算不算浪漫
2018/05/18
1.9K0
C++核心准则ES.74:尽量在循环变量初始化表达式中定义循环变量​
Limit the loop variable visibility to the scope of the loop. Avoid using the loop variable for other purposes after the loop.
面向对象思考
2020/06/03
9540
C语言编程中复杂的循环结构,你被循环晕了吗?
当一段代码需要执行多次时,您可能会遇到这种情况。通常,语句按顺序执行:首先执行函数中的第一个语句,然后执行第二个语句,依此类推。
猫咪爱分享
2018/08/07
1.6K0
C++ 循环
有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
爱学iOS的小麦子
2023/04/12
4230
# C#学习 -循环结构-while循环-do ...while 循环-for循环
C#程序的三大结构 顺序结构:程序的入口都是Main函数,代码从上往下,从左往右,依次执行; 分支结构:当我们的程序执行到某个位置的时候,进行条件判断,根据判断的结果来执行不同的操作; 循环结构:在满足某个条件的时候反复执行一个语句序列(循环)。
呆呆敲代码的小Y
2021/08/12
3.2K0
在Python中,不用while和for循环遍历列表
s1=s.encode(encoding='utf-8').decode('unicode_escape')
用户2337871
2019/07/19
5.5K0
SpringCloudGateWay中跨域配置不起作用
👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: 问题(BUG)集合 🌈 每日一语:纯纯降智的我 🌈 问题描述 SpringCloudGateWay中跨域配置不起作用 使用filter @Component public class CORSFilter implements Filter{ @Override public void doFilter(ServletRequest request, Serv
才疏学浅的木子
2022/11/13
1.3K0
SpringCloudGateWay中跨域配置不起作用
c语言循环中按键跳出,C语言跳出循环
大家好,又见面了,我是你们的朋友全栈君。 C语言跳出循环 C语言在程序员中备受青睐,成为最近25年使用最为广泛的编程语言。那么大家知道C语言跳出循环是怎么回事呢?下面一起来看看! 使用while或fo
全栈程序员站长
2022/08/19
3.6K0
C++中fstream_在使用中
C++中处理文件类似于处理标准输入和标准输出。类ifstream、ofstream和fstream分别从类 istream、ostream和iostream派生而来。作为派生的类,它们继承了插入和提取运算符(以及其他成员函数),还有与文件一起使用的成员和构造函数。可将文件<fstream> 包括进来以使用任何fstream。如果只执行输入,使用ifstream类;如果只执行输出,使用 ofstream类;如果要对流执行输入和输出,使用fstream类。可以将文件名称用作构造函数参数。
全栈程序员站长
2022/10/02
5.5K0
C++中fstream_在使用中
在C++中调用Python
虽然现在Python编程语言十分的火爆,但是实际上非要用一门语言去完成所有的任务,并不是说不可以,而是不合适。在一些特定的、对于性能要求比较高的场景,还是需要用到传统的C++来进行编程的。但是C++的一个缺点是比较难找到很好的轮子,这也是很多人专用Python的一个重要原因。这篇文章我们要介绍的是一个比较特殊的场景——用C++的代码去调用Python函数中实现的一些功能。这样的话,如果代码的主体还是用C++完成的,而部分功能为了简便,引入一些Python中已经封装好的函数,这样就可以很好的结合两种语言各自的特点。而另一种工作方式:通过Python来调用一些C++或者Fortran中实现的高性能函数,可以参考这一篇博客。这两种不同的使用方法各有优劣,但是如果以Python为主导,就很难避开GIL的问题,这里我们就不过多的展开。
DechinPhy
2021/05/27
4.1K0
C++007-C++循环结构
在线练习: http://noi.openjudge.cn/ch0104/ https://www.luogu.com.cn/
用户2225445
2023/10/16
1590
C++007-C++循环结构
点击加载更多

相似问题

SQL错误: ORA- 00933 : SQL命令未正确结束00933。00000 - "SQL命令未正确结束“

22

出现错误"ORA-00933: SQL命令未正确结束“

20

ORA- 00933 : SQL命令未正确结束00933。00000 - "SQL命令未正确结束

11

错误: ORA-00933: SQL命令未正确结束

22

ORA- 00933 : SQL命令未正确结束00933。00000 - "SQL命令未正确结束“*原因:*操作:

238
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文