PowerMockito的基本使用记录

Mock是编程中Unit测试的常态。最开始使用的是easymock,确实很easy,可惜功能不够强大。对于private方法测试无能为力,对于static的工具类也没有办法,于是转向了PowerMockito,很好的解决了我的困扰。


Mock测试的主要做法就是在真实方法调用之前先模拟被测试类关联的外部类,接口的调用实现,对指定的参数,返回虚拟的结果(虚拟的返回值或者异常等),然后调用测试方法,再之后验证模拟的函数调用都有发生。


记录一下我使用powermockito的一些测试用例。


1.基本简单的mock和验证 (被测试的类是JcifsDataTransfer,引用的类包括NtlmPasswordAuthentication和SmbFile),其中NtlmPasswordAuthentication和SmbFile是在被测试类中New的实例,所以需要在Class的annotation中除了@RunWith(PowerMockRunner.class) 也要加入 @preparefortest (JcifsDataTransfer.class)。方法调用都是有返回值的,所以用when.thenReturn来模拟。

注意:New的preparefortest必须是被测试类

PowerMockito的基本使用记录_第1张图片


2. Mock Static类,值得注意的是static的verify先调用verifystatic(times)再直接写static方法的调用

PowerMockito的基本使用记录_第2张图片


3. 同一个方法调用多次返回不一样的值

when(someMock.someMethod()).doAnswer(new Answer() {
    private int count = 0;

    public Object answer(InvocationOnMock invocation) {
        if (count++ == 1)
            return 1;

        return 2;
    }
});
或者如下(第一次抛出异常,第二次返回mock值

when(mock.someMethod("some arg"))
  .thenThrow(new RuntimeException())
  .thenReturn("foo");




你可能感兴趣的:(Test,Java,Java,Web)