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

使用Mockito模拟类的成员变量

糜正业
2023-03-14
问题内容

我是开发的新手,尤其是单元测试的新手。我想我的要求很简单,但是我很想知道其他人对此的想法。

假设我有两个这样的类-

public class First {

    Second second ;

    public First(){
        second = new Second();
    }

    public String doSecond(){
        return second.doSecond();
    }
}

class Second {

    public String doSecond(){
        return "Do Something";
    }
}

假设我正在编写单元测试到测试First.doSecond()方法。但是,假设我想像这样模拟Second.doSecond()课程。我正在使用Mockito来做到这一点。

public void testFirst(){
    Second sec = mock(Second.class);
    when(sec.doSecond()).thenReturn("Stubbed Second");

    First first = new First();
    assertEquals("Stubbed Second", first.doSecond());
}

我看到模拟未生效,并且断言失败。没有办法模拟我要测试的类的成员变量。?


问题答案:

您需要提供一种访问成员变量的方式,以便您可以进行模拟传递(最常见的方式是使用参数的setter方法或构造函数)。

如果您的代码没有提供执行此操作的方法,则TDD(测试驱动开发)会将其错误地考虑在内。



 类似资料:
  • 使用mockito inline如何测试静态函数(使用stubing其他静态函数)或mock/stub某些内部依赖类? 以下是示例: 具有内部依赖于java的类Util。安全消息摘要 容器类有一些静态函数要测试 希望测试,并将返回为null,以便somettext有望返回。 由于它是静态函数,因此使用powermock进行了测试。 当使用模拟存根时。调用getStringDigest(),返回nu

  • 有什么方法可以模拟这个私有方法来测试我编写的方法吗?

  • 我有一个类需要测试。以下是的定义: 并根据值从数据库中检索一些要操作的数据。对于该数据库,值通过JSON文件持久化。 这使事情复杂化了。我需要的是在测试时将其设置为某个特定的日期。有没有办法可以用mockito模拟局部变量的值?

  • 我正在将Powermock从我目前正在进行的项目中移除,因此我试图仅用Mockito(Mockito-Core-2.2.28)重写一些现有的unitary测试。 无法模拟/Spy类Com.ExternalPackagePath.ExternalClass Mockito无法模仿/监视,因为: 最终类 正如Mockito文档(https://github.com/Mockito/Mockito/wi

  • 基类 在派生类中不应用组合和其他函数。如果是,我是否应用了错误的模式?我应该如何处理相同的?

  • 我试图使用PowerMockito在我正在测试的代码中模拟java.net.URL类的创建。基本上,我希望防止真正的HTTP请求发生,而是1)在请求发出时检查数据,2)在模拟响应中提供我自己的测试数据。这就是我正在尝试的: 我要测试的代码如下所示: 在前面的测试场景中,我模拟了wlInvokeUrlString以匹配“MyURLString”。我还尝试使用whenNew行的各种其他形式,尝试注入模