我正在进行一个混合的JVM项目:类主要使用Java,测试主要使用Kotlin.
所以我有一个Java MyClass
,它扩展了ParentClass
.两个航班都是雅加达@Entity
航班.它们是分开的,因为ParentClass
可以在其他地方使用:
@Entity
@Setter
@Getter
public class MyClass extends ParentClass {
// some attributes
}
和ParentClass
的属性只有getter,没有setters(由于对象已创建,因此必须不修改这些值):
@MappedSuperclass
@Getter
public class ParentClass {
private String value = "";
}
现在,我正在测试代码的某些部分,并try 模拟此对象以将值更新为非空值.
因为没有setters
,所以我们的 idea 是创建模拟,以便能够修改getValue()
并返回避免反射的其他值.
我试着用了mock.when(myMock.getValue()).thenReturn("my string")
左右的东西,但它不起作用.
在考特林测试中,我try 了多条线路:
val myMock = mock<MyClass>(CALLS_REAL_METHODS)
`when`(myMock.value).thenReturn("")
// or using mockito kotlin
whenever(myMock.value).thenReturn("")
第一行试图强制调用真正的getter,然后在接下来的两行中模拟一些getter,并通过这种方式获得所需的值.
但似乎不是工作是这样的.
我也试过this answer次了
val myMock = mock<MyClass>()
// And also
val myMock = org.mockito.kotlin.mock<MyClass>()
// And these two
`when`(myMock.value).thenReturn("")
whenever(myMock.value).thenReturn("")
它们都不起作用,我仍然有为moockito创建的"空"对象,所有值都是空的/对象是默认的.
还try 了:
val mock1: MyClass = mock(MyClass::class.java)
`when`(mock1.value).thenReturn("")
whenever(mock1.value).thenReturn("")
val mock2: MyClass = mock();
`when`(mock2.value).thenReturn("")
whenever(mock2.value).thenReturn("")
val mock3: MyClass = mock(CALLS_REAL_METHODS)
`when`(mock3.value).thenReturn("")
whenever(mock3.value).thenReturn("")
它们都不起作用,我的模拟类有缺省值.但不是其他的问题,但我也想修改父类,这是没有被嘲笑的.
那么,我错过了什么?使用Java和Kotlin是否存在互操作问题?是@Entity
或@MappedSuperclass
个奇怪的东西吗?
我需要使用反射吗?
提前谢谢你,