繁体   English   中英

在Mockito中有什么方法可以设置规则以在调用特定对象类型的属性时返回值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM