java - 使用 Mockito/PowerMockito 模拟父类(super class)的公共(public)方法

标签 java junit mockito junit4 powermockito

Mockito/PowerMockito 中是否有模拟父类(super class)的一些方法。

下面是一个场景,它做了一个多级继承。

public class Network {
  public String getNetwork() {
    return "Technology";
  }
}

这是扩展 Network 的另一个类 Technology

public class Technology extends Network {
  public Type getTechnology() {
    String network = getNetwork();
    if(network == null){
      return null;
    }
    return network;
  }
}

扩展 Technology 的另一个类 Service

public class BaseService extends Technology {
  public void getServices() {
    Type type = getTechnology();
    if(type == null){
      throw new Exception('Type not found');
    }
  }
}

我想为 BaseService 类方法 getServices 编写一个测试用例,以便在技术类 Type 为 null 时抛出异常。

我尝试了几个步骤,但无济于事。

编写的示例测试用例

@Test
    public void test_get_services_should_throw__exception_when_type_is_null() throws Exception{

        //Arrange
        expectedException.expect(Exception.class);

        baseService = Mockito.mock(BaseService.class, Mockito.CALLS_REAL_METHODS);

        when(baseService.getTechnology()).thenReturn(null);


        //Act
        baseService.getServices();
    }

上面的代码片段只是一个示例,可能包含错误。如有请忽略。

请帮我解决这个问题。

提前致谢。

最佳答案

这应该有效。

@RunWith(MockitoJUnitRunner.class)
public class TestInheritance {

  @Spy
  BaseService baseService;

  @Rule
  public final ExpectedException expectedException = ExpectedException.none();

  @Test
  public void test_get_services_should_throw__exception_when_type_is_null() throws Exception{

    expectedException.expect(Exception.class);

    when(baseService.getTechnology()).thenReturn(null);

    baseService.getServices();
  }
}

关于java - 使用 Mockito/PowerMockito 模拟父类(super class)的公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698748/

相关文章:

java - 朱尼特木星 : How can I change a mockito mock behavior cached in a List outside the test class?

java - 使用 Mockito 调用回调

java - 如何使用模拟通过单元测试覆盖静态字段?

java - 需要在 java 的 log4j 之前将参数附加到每个日志

java StringTokenizer - nextToken 可以返回 null 吗?

java - 尝试使用正弦和余弦制作星星

java - @InjectMocks 属性不能调用 Mockito 的方法 thenReturn 吗?

java - 如何使用 JUnit/Mockito 模拟一个值来测试另一个方法中的条件?

java - 如何从java调用python脚本并返回长文本?

java - JUnit 测试包含 RestTemplate 交换调用的 void 方法