[英]is there any way in Mockito I set a rule to return a value when a property of a specific object type is called?
我正在尝试执行以下操作(我肯定有办法,但是我无法弄清楚)。
问题:
我的课程中有一个私有方法,该课程是使用@InjectedMocks注入的。
私有方法调用服务,并从私有对象发送属性作为参数。
像这样
private MyObject myObject = new Object();
public void main(){
doSomething();
}
private void doSomething(){
someService(mObject.getValue);
}
问题是我的对象不是那么容易,并且它具有给它值的注释。 好像@InjectedMocks一样,永远不会分配值,而myObject始终为null。
由于方法和对象都是私有的,因此我不能仅分配值(而且我避免为它们添加公共设置器)。
我的方法:
我想模拟这样的事情:
when(any(MyObject).class).getValue().thenReturn("something");
因此,在测试中我将避免使用NP。
是否可以使用Mockito?
有没有更优雅的方式做到这一点?
我假设您的代码示例中有一些错误。
以下内容实际上有效并显示“ foobar”:尝试将其与实际代码进行比较,以了解您忘记了什么。
public class MockitoTest {
@InjectMocks private TestClass test;
@Mock private MyObject mock;
@Test
public void test() {
MockitoAnnotations.initMocks(this);
Mockito.when(mock.getValue()).thenReturn("foobar");
test.main();
}
}
class TestClass {
private MyObject myObject = new MyObject();
public void main() {
doSomething();
}
private void doSomething() {
System.out.println(myObject.getValue());
}
}
class MyObject {
public String getValue() {
return "hello";
}
}
您可以单独使用PowerMock.createPartialMock和代理调用方法来模拟对象或方法。 例如你上面的代码
when(any(MyObject).class).getValue().thenReturn("something");
应该
when(mockedObject).methodCall().thenReturn("something");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.