首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用mockito测试私有方法

使用mockito测试私有方法
EN

Stack Overflow用户
提问于 2012-01-10 14:33:11
回答 9查看 420.3K关注 0票数 121
代码语言:javascript
复制
public class A {

    public void method(boolean b){
          if (b == true)
               method1();
          else
               method2();
    }

    private void method1() {}
    private void method2() {}
}

public class TestA {

    @Test
    public void testMethod() {
      A a = mock(A.class);
      a.method(true);
      //how to test like    verify(a).method1();
    }
}

如何测试私有方法是否被调用,以及如何使用mockito测试私有方法?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-01-10 14:43:41

你不能用Mockito做到这一点,但是你可以使用Powermock来扩展Mockito和模拟私有方法。Powermock支持Mockito。Here就是一个例子。

票数 93
EN

Stack Overflow用户

发布于 2018-09-22 18:47:23

虽然Mockito不提供该功能,但您可以使用Mockito + JUnit ReflectionUtils类或JUnit ReflectionTestUtils类实现相同的结果。请看下面取自here的示例,解释如何调用私有方法:

代码语言:javascript
复制
ReflectionTestUtils.invokeMethod(student, "saveOrUpdate", "From Unit test");

可以在Mockito for Spring一书中找到ReflectionTestUtils和Mockito的完整示例

票数 27
EN

Stack Overflow用户

发布于 2012-01-11 07:10:49

从行为的角度来考虑这一点,而不是从有什么方法的角度来考虑。如果b为真,则名为method的方法具有特定的行为。如果b为false,它会有不同的行为。这意味着您应该为method编写两个不同的测试;每种情况一个。因此,不是有三个面向方法的测试(一个用于method,一个用于method1,一个用于method2 ),而是两个面向行为的测试。

与此相关(我最近在另一个SO帖子中建议了这一点,并因此被称为四个字母的单词,所以请对此持保留意见);我发现选择反映我正在测试的行为的测试名称而不是方法的名称会很有帮助。所以不要把你的测试叫做testMethod()testMethod1()testMethod2()等等。我喜欢像calculatedPriceIsBasePricePlusTax()taxIsExcludedWhenExcludeIsTrue()这样的名称,它们表明我正在测试什么行为;然后在每个测试方法中,只测试指定的行为。大多数这样的行为只涉及对公共方法的一次调用,但可能涉及对私有方法的多次调用。

希望这能有所帮助。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8799439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档