我有一堂课 - 这是一个简单的示例,仅供演示。
class Foo
{
public int foo (int x)
{
if (bar (x))
{
return 0;
}
return 1;
}
private boolan bar (int x)
{
// whatever
}
}
我想要进行 JUnit 测试。我要测试的是
bar
,而不是foo
。
class MyTest
{
@Test
void test ()
{
assertTrue (bar (0));
assertTrue (bar (1));
....
但是
bar
对于外部课程来说是私有的 MyTest
。看不见。
现在该怎么办?公开
bar
或尝试对包含 foo
的 bar
进行测试?
通常,我们编写的单元测试应该只检查我们的公共方法契约。私有方法是公共方法的调用者不知道的实现细节。此外,改变我们的实现细节不应该导致我们改变我们的测试。
一般来说,敦促测试私有方法会凸显以下问题之一:
我们的私有方法中有死代码。 我们的私有方法太复杂,应该属于另一个类。 我们的方法一开始就不应该是私有的。 因此,当我们觉得需要测试私有方法时,我们真正应该做的是修复底层设计问题。
(来自这里)
首先想一下你是否真的想这样做。如果您必须测试私有方法,通常意味着您的代码架构不好,可能您应该将此方法提取到另一个类并注入对象,而不是强制测试它。
但是回答一个问题:我认为你可以使用java反射来改变方法的可见性并调用它。