如何模拟调用 class 的属性?
How to mock call on an attribute of class?
我正在尝试测试以下内容 class
public class MyClass {
protected OtherClass other;
public MyClass(String arg) {
this.other = new OtherClass(arg);
}
public void doSomething() {
String response = other.sendRequest(); // mock this call
// ...
}
}
我想测试 doSomething()
,为此我需要模拟调用 sendRequest()
。为此,我尝试了以下方法,但没有用:
@Test
public void doSomethingTest() {
MyClass myClass = new MyClass("test");
when(myClass.other.sendRequest()).thenReturn("response");
myClass.doSomething();
}
真正的 sendRequest()
仍在被调用,而不是返回模拟响应。
如何使用 Mockito 模拟对 sendRequest()
的调用?
如果你在MyClass
class中实例化OtherClass
对象,那么真的不可能模拟它
您需要在 MyClass
之外实例化它,然后将其注入 MyClass
(例如通过其构造函数)。
然后您在测试中需要做的就是模拟对模拟 OtherClass
对象的调用。并用它来实例化MyClass
对象
将 MyClasss 更改为
public class MyClass {
protected OtherClass other;
public MyClass(OtherClass otherClass) {
this.other = otherClass;
}
public void doSomething() {
String response = other.sendRequest();
}
}
您的代码将从
MyClass myClass = new MyClass("s");
到
OtherClass other = new OtherClass("s");
MyClass myClass = new MyClass(other);
你现在可以编写这个测试了:
@Test
public void doSomethingTest() {
OtherClass other = mock(OtherClass.class);
when(other.sendRequest()).thenReturn("response");
MyClass myClass = new MyClass(other);
myClass.doSomething();
// .. test assertions
}
我正在尝试测试以下内容 class
public class MyClass {
protected OtherClass other;
public MyClass(String arg) {
this.other = new OtherClass(arg);
}
public void doSomething() {
String response = other.sendRequest(); // mock this call
// ...
}
}
我想测试 doSomething()
,为此我需要模拟调用 sendRequest()
。为此,我尝试了以下方法,但没有用:
@Test
public void doSomethingTest() {
MyClass myClass = new MyClass("test");
when(myClass.other.sendRequest()).thenReturn("response");
myClass.doSomething();
}
真正的 sendRequest()
仍在被调用,而不是返回模拟响应。
如何使用 Mockito 模拟对 sendRequest()
的调用?
如果你在MyClass
class中实例化OtherClass
对象,那么真的不可能模拟它
您需要在 MyClass
之外实例化它,然后将其注入 MyClass
(例如通过其构造函数)。
然后您在测试中需要做的就是模拟对模拟 OtherClass
对象的调用。并用它来实例化MyClass
对象
将 MyClasss 更改为
public class MyClass {
protected OtherClass other;
public MyClass(OtherClass otherClass) {
this.other = otherClass;
}
public void doSomething() {
String response = other.sendRequest();
}
}
您的代码将从
MyClass myClass = new MyClass("s");
到
OtherClass other = new OtherClass("s");
MyClass myClass = new MyClass(other);
你现在可以编写这个测试了:
@Test
public void doSomethingTest() {
OtherClass other = mock(OtherClass.class);
when(other.sendRequest()).thenReturn("response");
MyClass myClass = new MyClass(other);
myClass.doSomething();
// .. test assertions
}