假设我有一个要在下面测试的功能,请在名为" Utils.kt"
的文件中声明//Utils.kt
fun doSomething() = 1
然后我们创建一个测试类来测试它
//UtilsTest.kt
@RunWith(JMockit::class)
class UtilsTest {
@Test
fun testDoSomething() {
object : Expectation() {
init {
doSomething()
result = 2
}
}
assertEquals(2, doSomething())
}
}
我想模仿doSomething
,让它返回2
,但它不会工作,实际结果为1
是否有针对此目的的解决方法?
答案 0 :(得分:1)
解决方法在Java端模拟它,因为您无法从Kotlin文件中引用UtilsKt
类。
@RunWith(JMockit.class)
public final class UtilsFromJavaTest {
@Test
public final void testDoSomething(@Mocked @NotNull final UtilsKt mock) {
new Expectations() {
{
UtilsKt.doSomething();
this.result = 2;
}
};
Assert.assertEquals(2, UtilsKt.doSomething());
}
}
答案 1 :(得分:0)
感谢@aristotll,我们可以简单地扩展解决方法,使其更易于使用。
首先,声明一个返回UtilsKt类的java类
//TopLevelFunctionClass.java
public class TopLevelFunctionClass {
public static Class<UtilsKt> getUtilsClass() {
return UtilsKt.class
}
}
然后,使用部分模拟
模拟这个类的期望//UtilsTest.kt
@RunWith(JMockit::class)
class UtilsTest {
@Test
fun testDoSomething() {
object : Expectation(TopLevelFunctionClass.getUtilsClass()) {
init {
doSomething()
result = 2
}
}
assertEquals(2, doSomething())
}
}