class OneUtil { fun add(x: Int, y: Int): Int { return staticAdd(x, y) } companion object { fun staticAdd(x: Int, y: Int): Int { return x + y } } } OneUtilTest.kt class OneUtilTest { class Mock { @MockInvoke(targetClass = OneUtil::class) private fun staticAdd(x: Int...
首先,这是一个包含伴生对象的 Kotlin 类: class Calculator { companion object { fun add(a: Int, b: Int): Int { return a + b } } } 复制代码 接下来,我们将编写一个测试类来测试 Calculator 类的伴生对象中的 add 函数: import org.junit.jupiter.api.Test import org.junit.jupiter.api.Assertion...
把类的最核心的成员放在首构造方法,如必须要依赖的参数,公开的成员,类型体系中的核心成员等,这些应该直接放在首构造方法中,并按重要的顺序进行声明,这样也能方便进行依赖注入和测试Mock对象替换。 私有成员应该在类中声明,并且在声明时进行初始化,如果无法初始化就标记为延迟初始(late init)。 初始化代码块,应该做一...
把类的最核心的成员放在首构造方法,如必须要依赖的参数,公开的成员,类型体系中的核心成员等,这些应该直接放在首构造方法中,并按重要的顺序进行声明,这样也能方便进行依赖注入和测试Mock对象替换。 私有成员应该在类中声明,并且在声明时进行初始化,如果无法初始化就标记为延迟初始(late init)。 初始化代码块,应该做一...
mockObject.someMethod(any()) } answers { originalCall(it.invocation.args.first()) } 1. 2. 3. 4. 5. 备注:对于某些方法调用,我们并不想完全使用模拟的值,而是想使用特定的函数调用过程,那么可以使用originalCall来实现对实际函数的调用。 构造函数 ...
把类的最核心的成员放在首构造方法,如必须要依赖的参数,公开的成员,类型体系中的核心成员等,这些应该直接放在首构造方法中,并按重要的顺序进行声明,这样也能方便进行依赖注入和测试Mock对象替换。 私有成员应该在类中声明,并且在声明时进行初始化,如果无法初始化就标记为延迟初始(late init)。
every{mockObject.someMethod(any())}answers{originalCall(it.invocation.args.first())} 备注:对于某些方法调用,我们并不想完全使用模拟的值,而是想使用特定的函数调用过程,那么可以使用originalCall来实现对实际函数的调用。 构造函数 mockkConstructor(MyClass::class)every{anyConstructed<MyClass>().someMethod()}...
对于void类型的方法:需要利用mock的测试框架,例如Mockito 单元测试动机 TDD(Test Drived Development) 在项目初期采用TDD开发,在方法实现前,先写对应的单元测试代码,需要注意方法的Input 和 Output,不去想具体实现细节。也可以考虑方法的一些异常,各种情况的预期结果。这样会对方法的边界以及架构有更清晰的认识。
在Kotlin中,可以使用object关键字创建单例对象。要创建一个带参数的单例,可以使用伴生对象(companion object)和工厂方法(factory method)的组合。 下面是一个示例代码,展示了如何用Kotlin创建一个带参数的单例: 代码语言:txt 复制 class MySingleton private constructor(private val parameter: String) { companion ...
val callable = Mockito.mock(Callable::class.java)Mockito.`when`(callable.call()).thenReturn(/* … */) 1. 避免使用 Any 的扩展函数或属性的名称 除非绝对必要,否则应避免对方法使用 Any 的扩展函数的名称或对字段使用 Any 的扩展属性的名称。虽然成员方法和...