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测试私有方法?
发布于 2012-01-10 14:43:41
发布于 2018-09-22 18:47:23
虽然Mockito不提供该功能,但您可以使用Mockito + JUnit ReflectionUtils类或JUnit ReflectionTestUtils类实现相同的结果。请看下面取自here的示例,解释如何调用私有方法:
ReflectionTestUtils.invokeMethod(student, "saveOrUpdate", "From Unit test");
可以在Mockito for Spring一书中找到ReflectionTestUtils和Mockito的完整示例
发布于 2012-01-11 07:10:49
从行为的角度来考虑这一点,而不是从有什么方法的角度来考虑。如果b
为真,则名为method
的方法具有特定的行为。如果b
为false,它会有不同的行为。这意味着您应该为method
编写两个不同的测试;每种情况一个。因此,不是有三个面向方法的测试(一个用于method
,一个用于method1
,一个用于method2
),而是两个面向行为的测试。
与此相关(我最近在另一个SO帖子中建议了这一点,并因此被称为四个字母的单词,所以请对此持保留意见);我发现选择反映我正在测试的行为的测试名称而不是方法的名称会很有帮助。所以不要把你的测试叫做testMethod()
,testMethod1()
,testMethod2()
等等。我喜欢像calculatedPriceIsBasePricePlusTax()
或taxIsExcludedWhenExcludeIsTrue()
这样的名称,它们表明我正在测试什么行为;然后在每个测试方法中,只测试指定的行为。大多数这样的行为只涉及对公共方法的一次调用,但可能涉及对私有方法的多次调用。
希望这能有所帮助。
https://stackoverflow.com/questions/8799439
复制相似问题