使用mockito和powermockito在java中进行单元测试

使用mockito和powermockito在java中进行单元测试,java,junit,mockito,powermockito,Java,Junit,Mockito,Powermockito,我有办法 public TaskProperty addTask() { /*some operations * */ mapToProperty(); } private TaskProperty mapToProperty() { /**some op's**/ } 如何为addTask()编写单元测试用例,而不允许控件进入mapToProperty()方法 如何模拟私有方法mapToProperty() 你想这样做的事实。。。这不是个好

我有办法

public TaskProperty addTask()
{
     /*some operations
     *
     */
     mapToProperty();
 }

private TaskProperty mapToProperty()
{
    /**some op's**/
}
如何为
addTask()
编写单元测试用例,而不允许控件进入
mapToProperty()
方法

如何模拟私有方法
mapToProperty()

你想这样做的事实。。。这不是个好主意:

private
方法表示“内部实现”细节。将他们排除在测试之外。。。意味着您的测试需要了解这个私有方法。但是您的测试不应该知道任何关于您的私有实现细节的信息。他们不需要关心

换句话说:单元测试应该只关注类的公共接口。因此:您试图以一种可以测试这些公共方法的方式编写所有代码,而无需“禁用”正在测试的类中的其他内容。意思是:要么重写你的私有方法,这样你就可以从任何单元测试中调用它;或者如果不可能,将相应的行为移动到另一个类中;然后向测试中的方法提供该类的mock实例

长话短说:您的问题意味着您想通过使用“模仿框架锤”来“按摩”症状来修复“糟糕的设计”。但这只是一种症状;潜在的问题仍然存在,并影响您的代码库。因此,花时间解决真正的问题;而不是围绕它工作

以防万一你还是喜欢嘲笑这个私有方法;我更倾向于建议研究mockito间谍来实现这一点(尽管PowerMock也允许进行此类测试,请参见)

您希望这样做的事实。。。这不是个好主意:

private
方法表示“内部实现”细节。将他们排除在测试之外。。。意味着您的测试需要了解这个私有方法。但是您的测试不应该知道任何关于您的私有实现细节的信息。他们不需要关心

换句话说:单元测试应该只关注类的公共接口。因此:您试图以一种可以测试这些公共方法的方式编写所有代码,而无需“禁用”正在测试的类中的其他内容。意思是:要么重写你的私有方法,这样你就可以从任何单元测试中调用它;或者如果不可能,将相应的行为移动到另一个类中;然后向测试中的方法提供该类的mock实例

长话短说:您的问题意味着您想通过使用“模仿框架锤”来“按摩”症状来修复“糟糕的设计”。但这只是一种症状;潜在的问题仍然存在,并影响您的代码库。因此,花时间解决真正的问题;而不是围绕它工作


以防万一你还是喜欢嘲笑这个私有方法;我更愿意建议研究一个mockito间谍来做这件事(尽管PowerMock也允许这样的测试,请参见)

它的可能副本是有意义的。如果您有一个私有方法,这意味着它必须执行一些必要的重要功能。所以,我应该允许控件通过私有方法流动,以确保私有方法也能正常工作,因为它的复制是有意义的。如果您有一个私有方法,这意味着它必须执行一些必要的重要功能。所以,我应该允许控件流经私有方法,以确保私有方法也能正常工作