在 java 中使用 mockito 和 powermockito 进行单元测试
Unit testing in java using mockito and powermockito
我有办法
public TaskProperty addTask()
{
/*some operations
*
*/
mapToProperty();
}
private TaskProperty mapToProperty()
{
/**some op's**/
}
如何在不允许控件进入 mapToProperty()
方法的情况下为 addTask()
编写单元测试用例。
如何模拟私有方法mapToProperty()
?
您想要这样做的事实...并不是一个好主意:
private
方法代表 "internal implementation" 细节。从测试中排除它们……意味着您的测试需要知道这个私有方法。但是您的测试不应该知道您的私有实现细节的任何信息。他们应该不需要关心。
换句话说:你的单元测试应该只关心你的 class(es) 的 public 接口。因此:您尝试以一种可以测试这些 public 方法的方式编写所有代码,而无需 "disable" 您正在测试的 class 中的其他方法。意思是:要么尝试重写你的私有方法,这样你就可以从任何单元测试中调用它;或者如果那不可能,将相应的行为移动到 another class;然后向您的测试方法提供 mocked 实例 class 。
长话短说:您的问题暗示您想通过使用 "mocking framework hammer" 到 "massage" 症状来修复 "bad design"。但这是一个症状;并且潜在的问题仍然存在,并影响您的代码库。所以花时间解决真正的问题;而不是解决它!
以防万一您仍然喜欢模拟该私有方法;我宁愿建议调查一个 mockito 间谍来做到这一点(尽管 PowerMock 也允许进行此类测试,请参阅 here)
我有办法
public TaskProperty addTask()
{
/*some operations
*
*/
mapToProperty();
}
private TaskProperty mapToProperty()
{
/**some op's**/
}
如何在不允许控件进入 mapToProperty()
方法的情况下为 addTask()
编写单元测试用例。
如何模拟私有方法mapToProperty()
?
您想要这样做的事实...并不是一个好主意:
private
方法代表 "internal implementation" 细节。从测试中排除它们……意味着您的测试需要知道这个私有方法。但是您的测试不应该知道您的私有实现细节的任何信息。他们应该不需要关心。
换句话说:你的单元测试应该只关心你的 class(es) 的 public 接口。因此:您尝试以一种可以测试这些 public 方法的方式编写所有代码,而无需 "disable" 您正在测试的 class 中的其他方法。意思是:要么尝试重写你的私有方法,这样你就可以从任何单元测试中调用它;或者如果那不可能,将相应的行为移动到 another class;然后向您的测试方法提供 mocked 实例 class 。
长话短说:您的问题暗示您想通过使用 "mocking framework hammer" 到 "massage" 症状来修复 "bad design"。但这是一个症状;并且潜在的问题仍然存在,并影响您的代码库。所以花时间解决真正的问题;而不是解决它!
以防万一您仍然喜欢模拟该私有方法;我宁愿建议调查一个 mockito 间谍来做到这一点(尽管 PowerMock 也允许进行此类测试,请参阅 here)