美文网首页
代码单元测试四

代码单元测试四

作者: supremecsp | 来源:发表于2022-04-20 17:54 被阅读0次

    如何对private方法写单元测试?

    有时public方法返回值是void,对该方法写测试无法进行断言。可以对方法内的部分逻辑进行封装再测试。

    1,可以通过反射测试private方法

        @Test
        public void test() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
            App app = new App();
            Method privateMethod = app.getClass().getDeclaredMethod("callPrivateMethod");
            privateMethod.setAccessible(true);
            Assert.assertEquals("Private method is called.", privateMethod.invoke(app));
        }
    

    2,加上@VisibleForTesting注解,将方法改为protected;(个人用这个)

    如何mock返回值为void的方法?

    在Mockito中,我们可以使用不同的方法来调用实数方法或模拟void方法。 我们可以根据要求使用其中一个选项
    doNothing() :完全忽略对void方法的调用,这是默认行为
    doAnswer() :在调用void方法时执行一些运行时或复杂的操作
    doThrow() :调用模拟的void方法时引发异常
    doCallRealMethod() :不要模拟并调用真实方法

    1,doNothing()
    如果我们只想完全忽略void方法调用,则可以使用doNothing()。
    例:用于下发信息 doNothing().when(devGroupSyncProducer).sendMessage(any());
    2,doAnswer()可以对参数进行一些特殊处理
    例:入参传入一个集合,方法对集合进行过滤,返回void

      doAnswer((InvocationOnMock invocation)->{
                List dids = (List) invocation.getArguments()[0];
                dids.remove(dids.size()-1);
                return null;
            }).when(familyServer).filterSubDidOtherFamily(any());
    

    参考:使用Mockito的Mock Void方法如何单元测试Java的private方法

    相关文章

      网友评论

          本文标题:代码单元测试四

          本文链接:https://www.haomeiwen.com/subject/ccgvertx.html