【问题标题】:Mockito How to test that an instance created inside a method is calling methodsMockito 如何测试在方法内创建的实例是否正在调用方法
【发布时间】:2021-10-07 15:46:53
【问题描述】:

假设我有这个功能:

fun method() {
   val obj = Obj()
   obj.callsMethod()
   obj.callsOtherMethod()
}

我怎样才能做类似于 verify(obj).callsMethod() 的事情?有没有其他方法可以测试这个方法?

【问题讨论】:

  • 我认为这不可能。您可以考虑将其更改为 fun method(obj: Obj = Obj()) 总是好的,以便能够“注入”需要测试的值。

标签: kotlin testing mockito


【解决方案1】:

你有三个选择:

  1. 使用注入
  2. 使用PowerMockito
  3. 以测试友好的方式重构代码

使用注入

如果对象 Obj 被注入到您的测试类中,而不是已经在方法中初始化,您将能够注入一个模拟,然后使用表达式

verify(obj).callsMethod()

你已经知道了,这是正确的。

使用 PowerMockito

使用 powermockito 你可以写出这样的东西

@RunWith(PowerMockRunner.class)
@PrepareForTest({Obj.class})
class MyJunit{
....
@Test
public void test() throws Exception{
Obj myMock = Mockito.mock(Obj.class);
PowerMockito.whenNew(Obj.class).withAnyArguments().thenReturn(myMock);

// here your test
}

此时你可以使用你已经知道的表达方式了。

重构

您可以使用protected 方法来构建Obj 并在您的junit 中模拟此方法以返回Obj 的模拟版本,然后使用您已经知道的表达式,这是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-05
    • 2021-08-27
    • 2017-07-22
    • 2023-03-03
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多