【问题标题】:counting times private method is called with PowerMockito使用 PowerMockito 调用计算次数私有方法
【发布时间】:2020-01-07 11:46:12
【问题描述】:

我正在尝试获取调用私有方法的次数。 对于公共方法,我可以使用 mockito 来做到这一点:

Mockito.verify(mockedObject, times(numberOfTimes)).methodToBeChecked();

是否有 PowerMockito 的等价物? 我不想让你使用间谍。

提前致谢。

【问题讨论】:

    标签: unit-testing junit mocking mockito powermock


    【解决方案1】:

    是的。

    这里是我的依赖:

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.28.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-mockito2</artifactId>
        <version>2.0.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>2.0.2</version>
        <scope>test</scope>
    </dependency>
    

    被测类:

    public class A {
    
    
        private void _test(){
    
        }
    
        public void test(){
            for (int i = 0; i < 10; i++) {
                _test();
            }
        }
    }
    

    我的朱尼特:

    @RunWith(PowerMockRunner.class)
    @PrepareForTest({A.class})
    public class ATest {
    
        private A a;
    
        public ATest() {
        }
    
        @Before
        public void setUp() {
            a = PowerMockito.spy(new A());
    
        }
    
        /**
         * Test of test method, of class A.
         */
        @Test
        public void testTest() throws Exception {
            a.test();
            PowerMockito.verifyPrivate(a, Mockito.times(10)).invoke("_test");
        }
    
    }
    

    但使用 powermockito 有缺点:

    1. 您无法使用 Jacoco 和动态检测工具监控覆盖率
    2. 可能您正在开发一个难以测试的设计:只有在处理遗留问题且无法更改代码时才应使用它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      相关资源
      最近更新 更多