让我们说我们有一个这样的班级:
class Whatever {
private var something = false
fun aMethod(): Int {
return if( something ) {
1
} else {
0
}
}
}
根据documentation,看来我应该能够执行以下操作:
val classUnderTest = spyk(Whatever())
every { classUnderTest getProperty "something" } returns true
assertThat(classUnderTest.aMethod()).isEqualTo(1)
但是我得到了错误:io.mockk.MockKException: Missing calls inside every { ... } block
我正在使用模拟1.8.5,kotlin 1.2.51
答案 0 :(得分:1)
尝试使用答案代替回报,例如:
CREATE FUNCTION dbo.HashCheeseName (@CheeseName NVARCHAR(40))
RETURNS varbinary(8000)
AS BEGIN
DECLARE @Salt VARCHAR(25);
DECLARE @CheeseName NVARCHAR(40);
DECLARE @output varbinary(8000) ;
SET @Salt = '123abc11aa';
SET @output = HASHBYTES('SHA2_256', CAST(@CheeseName as VARCHAR(40)) + @Salt);
RETURN @output;
END
答案 1 :(得分:0)
您可以使用此小扩展名
overflow-y: hidden;
它设置作为参数传递的相同类型的第一个字段的值,并且可以使用多个参数,例如:
fun Any.mockPrivateFields(vararg mocks: Any): Any {
mocks.forEach { mock ->
javaClass.declaredFields
.filter { it.modifiers.and(Modifier.PRIVATE) > 0 || it.modifiers.and(Modifier.PROTECTED) > 0 }
.firstOrNull { it.type == mock.javaClass}
?.also { it.isAccessible = true }
?.set(this, mock)
}
return this
}
它将模拟找到的第一个Int字段和找到的第一个String字段。
这仅适用于私有/受保护的字段。
您可以对其进行修改,以支持相同类型的多个字段。我没有尝试使用泛型,但是我想支持它并不难。
答案 2 :(得分:0)
这可能是因为 kotlin 编译器为您的 something
属性设置了 there is no getter/setter created。
如果您将其修改为如下所示会怎样?
class Whatever {
private val something
get() = false
fun aMethod(): Int {
return if( something ) {
1
} else {
0
}
}
}