如何模拟由子类的函数调用的抽象类的超函数

时间:2019-09-15 00:00:16

标签: java unit-testing powermock

我正在为从抽象类扩展的类编写单元测试,子类的一个函数将调用超无效函数和函数。

cls

我只想测试Submit函数,模拟load和getItem函数。我是powermock的新手。

1 个答案:

答案 0 :(得分:0)

根据经验,应该尽量避免使用Powermock,因为它通常与错误的代码设计有关。 在这种情况下,您实际上不需要使用它,因为Mockito用spies来介绍这种情况,这本身就是一种不好的代码味道,如文档中所述。

我的建议是使用组成而不是继承来更改代码。

不过,如果您仍然按原样使用代码,只需将Junit和Mockito添加到您的依赖项中,然后编写如下测试:

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class SubBoTest {

  @Test
  public void shouldBehaveAsExpected() {
    final String expected = "expected String";
    final String testString = "test string";

    final SubBo bo = spy(SubBo.class);
    doNothing().when(bo).load(eq(testString));
    when(bo.getItem("myName")).thenReturn(expected);

    final String actual = bo.submit(testString);

    assertEquals(expected, actual);
  }
}

再次提醒您,这不是正确的方法,建议进行重构。