Mockk는 어떻게
객체를 mocking 할까
Mockk
VS mockito
이 코드의 결과는?
class Simple1 {
fun simple1(): String {
return "hello world"
}
}
class Simple2(
private val simple1: Simple1,
) {
fun simple2(): String {
return simple1.simple1()
}
}이 코드의 결과는?
@Test
fun mocking() {
val simple1 = Simple1()
val simple2 = Simple2(simple1)
every {
simple2.simple2()
} returns "goodbye world"
assertThat(simple2.simple2()).isEqualTo("goodbye world")
} 이 코드의 결과는?
@Test
fun mocking() {
val simple1 = mockk<Simple1>()
val simple2 = Simple2(simple1)
every {
simple2.simple2()
} returns "goodbye world"
assertThat(simple2.simple2()).isEqualTo("goodbye world")
} 이 코드의 결과는?
@Test
fun mocking() {
val simple1 = mockk<Simple1>()
val simple2 = mockk<Simple2>()
every {
simple2.simple2()
} returns "goodbye world"
assertThat(simple2.simple2()).isEqualTo("goodbye world")
} 왜 성공하는가
fun find_mock_object(target: Any): Any {
var temp: Any = target
while(true) {
val isMock: Boolean = isMockKMock(temp)
if(isMock) {
return target
}
val field: Field = temp.javaClass.declaredFields[0]
field.trySetAccessible()
temp = field.get(temp)
}
} 왜 성공하는가
Mockk 가 Mock 객체를 만드는 방법
class ProxySimple1(
private val simple1: Simple1,
) : Simple1() {
override fun simple1(): String {
return "goodbye world"
}
}Mockk 가 Mock 객체를 만드는 방법
tasks.withType<Test> {
useJUnitPlatform()
systemProperty("io.mockk.classdump.path", "output")
}Mockk 가 Mock 객체를 만드는 방법
public final class Simple1 {
public final String simple1() {
Callable var10000;
label40: {
if (this.getClass() == HashMap.class) {
if ((new Object[0]).length == 1 && (new Object[0])[0] == HashMap.class) {
var10000 = null;
break label40;
}
if ((new Object[0]).length == 2 && (new Object[0])[1] == HashMap.class) {
var10000 = null;
break label40;
}
}
JvmMockKDispatcher var1 = JvmMockKDispatcher.get(-7627940941739126697L, this);
var10000 = var1 != null && var1.isMock(this) ?
var1.handler(this, Simple1.class.getMethod("simple1"), new Object[0]) : null;
}
Callable var4 = var10000;
String var2 = var4 != null ? null : "hello world";
if (var4 != null) {
var2 = (String)var4.call();
}
return var2;
}
}
Mockk 가 Mock 객체를 만드는 방법
Mockk 가 Mock 객체를 만드는 방법
class Simple1 {
fun simple1(): Int {
return 999
}
}
class Simple2(
private val simple1: Simple1,
) {
fun simple2(): String {
return simple1.simple1().toString()
}
}참고자료