使用Mockito模拟类的成员变量 [英] Mocking member variables of a class using 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 . ?
推荐答案
您需要提供一种访问成员变量的方法,以便您可以传入模拟(最常见的方式是一个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模拟类的成员变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!