测试需要特定私有方法调用的单元?
Testing a unit for which a specific private method invocation is required?
我有一个测试难题:
我正在为单元 A
编写单元测试。我要测试的方法是func(B param)
。在(非测试)代码中,唯一调用 func(..)
的地方是 class C
,它也是项目中唯一可以使用 B
类型变量的地方被实例化(作为参数发送给func(B param)
,所以实例化方法是private
.
现在,我不确定如何在单元测试 中创建一个B
实例。
因为我可以在创建 B
的方法的方法声明中将 private
更改为 public
,但我感觉不对,因为它会将方法公开给项目的其余部分。
我也可以简单地将 B
创建方法复制到单元测试 class 中,但我讨厌复制代码。
对于这种情况是否有一些已知的最佳实践?
非常感谢,
迪马
您可能会考虑使用 EasyMock 或 Mokito 等模拟框架在此处创建 class B 的 "test double" 对象。
根据经验,只有 public 方法应该 直接测试 。通过扩展,public 代码应该测试所有私有代码。根据您使用的语言,您还可以强制将较少公开的代码公开给单元测试框架,而不必更改每个方法(例如 C# 中的 InternalsVisibleTo),但我承认此选项不适用于所有使用的语言所有框架。
除了单元测试之外,您军械库中的另一个工具应该是某种代码覆盖工具,以确保尽可能多的代码被所述测试覆盖。
我有一个测试难题:
我正在为单元 A
编写单元测试。我要测试的方法是func(B param)
。在(非测试)代码中,唯一调用 func(..)
的地方是 class C
,它也是项目中唯一可以使用 B
类型变量的地方被实例化(作为参数发送给func(B param)
,所以实例化方法是private
.
现在,我不确定如何在单元测试 中创建一个B
实例。
因为我可以在创建 B
的方法的方法声明中将 private
更改为 public
,但我感觉不对,因为它会将方法公开给项目的其余部分。
我也可以简单地将 B
创建方法复制到单元测试 class 中,但我讨厌复制代码。
对于这种情况是否有一些已知的最佳实践?
非常感谢, 迪马
您可能会考虑使用 EasyMock 或 Mokito 等模拟框架在此处创建 class B 的 "test double" 对象。
根据经验,只有 public 方法应该 直接测试 。通过扩展,public 代码应该测试所有私有代码。根据您使用的语言,您还可以强制将较少公开的代码公开给单元测试框架,而不必更改每个方法(例如 C# 中的 InternalsVisibleTo),但我承认此选项不适用于所有使用的语言所有框架。
除了单元测试之外,您军械库中的另一个工具应该是某种代码覆盖工具,以确保尽可能多的代码被所述测试覆盖。