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

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

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

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

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

  private MyHello myHello;

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制
@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 11: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 13:33:49

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

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

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

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

https://stackoverflow.com/questions/13472392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档