繁体   English   中英

泛化私有方法的单元测试

[英]generalise unit testing for private method

我有一个私有方法,在该方法中我会进行所有验证,并且该方法将通用对象作为输入参数。 此私有方法由10个公共方法调用,它们传递特定对象,该对象是私有方法的参数列表中提到的通用对象的子类。

如何编写一个通用测试套件来测试私有方法,然后由所有10个不同的公共方法调用此方法,以使我不会在每个公共测试方法中重复进行验证。

我正在使用testng和嘲笑进行测试。

仅API应该进行单元测试。
私有方法不属于API。

由于您的验证方法具有核心作用,并且它执行特定的任务(验证),因此我认为,为了提高单元测试和总体设计的质量,应该重构实际设计。

例如,您可以引入一个新类(例如Validation ),然后将此私有方法作为公共方法提取到Validation类中。
在您的实际类中,通过包含Validation类的实例字段来添加依赖项:

public class MyClass{
  ...
  private Validation validation;
     MyClass(Validation validation){
       this.validation = validation;
     }
  ...
}

这样,您可以一次对单元验证进行单元测试,并在用户类中对其进行模拟。

UnitTests通过对象的公共接口验证公共可观察的行为

您的私有方法是一个实现细节,您无需明确测试。

如果您认为10多个测试用例不应覆盖代码的这一部分,那么您可以考虑将其移至(新) 服务类 (不,不包括具有静态方法的类...),并将其作为依赖项传入依赖注入

然后,您可以用模拟代替测试的服务类(无需 PowerMock 的帮助),并验证10多个测试用例是否调用了依赖项。

您还可以使用其自己的一组单元测试来验证新服务类的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM