Properties Mockito集私有属性

Properties Mockito集私有属性,properties,mockito,setter,Properties,Mockito,Setter,我对莫基托有个小问题。假设我有以下代码: MyObject object = mock(MyObject.class); System.out.println("PROPERTY 1 BRUT VALUE : " + property1Value); object.setProperty1(property1Value); System.out.println("PROPERTY 1 VALUE BEFORE STUB : " + object.getProperty1()); when(obj

我对莫基托有个小问题。假设我有以下代码:

MyObject object = mock(MyObject.class);
System.out.println("PROPERTY 1 BRUT VALUE : " + property1Value);
object.setProperty1(property1Value);
System.out.println("PROPERTY 1 VALUE BEFORE STUB : " + object.getProperty1());
when(object.getProperty1()).thenReturn(property1Value);
System.out.println("PROPERTY 1 VALUE AFTER STUB : " + object.getProperty1());

PROPERTY 1 BRUT VALUE : 150.0
PROPERTY 1 VALUE BEFORE STUB : 0.0
PROPERTY 1 VALUE AFTER STUB : 150.0
问题是我的对象属性没有直接设置。我在MyObject中有一个使用它的方法,它总是返回0。如果对象属性被模拟,则无法直接设置它

在这一点上的文档中找不到任何内容

谢谢

编辑1:以下是MyObject中使用Mockito设置的属性的方法

public Double getProperty1X2() {
    return 2 * property1;
}

此方法在测试中返回0,即使我设置了属性值。可能是因为它直接使用字段而不是getter?

您可以查看我在本次讨论中的答案:-

对你来说,关键是:-

when(object.getProperty1()).thenCallRealMethod();

你在嘲笑我的对象。因此,它在内部使用的代码应该根本不相关。被测试的班级是什么?为什么被测试的类关心MyObject的私有字段的值?我用这个方法编辑了我的问题。您是对的,我的类的内部行为在测试中应该没有问题,但是属性值没有设置……它返回0,因为方法
getProperty1X2
没有被存根。如果您的测试依赖于这两种方法,那么它们都应该被存根。如果没有存根,则返回默认值(0)。模拟不使用类的代码。它覆盖它的所有方法,并且对于每个方法,返回您告诉它返回的内容。如果你想执行MyObject的真实代码,为什么要模拟MyObject?那么你想要一个间谍,或者部分模拟。它们都在(第13点和第16点)中进行了描述,感谢您解决了这个问题:)