使用 Mockito 模拟类的成员变量

Mocking member variables of a class using Mockito(使用 Mockito 模拟类的成员变量)
本文介绍了使用 Mockito 模拟类的成员变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

I am a newbie to development and to unit tests in particular . I guess my requirement is pretty simple, but I am keen to know others thoughts on this.

假设我有两个这样的课程 -

Suppose I have two classes like so -

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 来做到这一点.

Let's say I am writing unit test to test First.doSecond() method. However, suppose, i want to Mock Second.doSecond() class like so. I am using Mockito to do this.

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

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

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

I am seeing that the mocking does not take effect and the assertion fails. Is there no way to mock the member variables of a class that I want to test . ?

推荐答案

你需要提供一种访问成员变量的方法,这样你就可以传入一个 mock(最常见的方法是 setter 方法或构造函数一个参数).

You need to provide a way of accessing the member variables so you can pass in a mock (the most common ways would be a setter method or a constructor which takes a parameter).

如果您的代码未提供执行此操作的方法,则它被错误地考虑为 TDD(测试驱动开发).

If your code doesn't provide a way of doing this, it's incorrectly factored for TDD (Test Driven Development).

这篇关于使用 Mockito 模拟类的成员变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)