为了账号安全,请及时绑定邮箱和手机立即绑定

如何对私有方法进行单元测试?

如何对私有方法进行单元测试?

饮歌长啸 2019-07-01 15:39:26
如何对私有方法进行单元测试?我正在构建一个类库,它将包含一些公共和私有方法。我希望能够对私有方法进行单元测试(主要是在开发过程中,但也可能对将来的重构很有用)。正确的方法是什么?
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

如果要对私有方法进行单元测试,可能会出现问题。单元测试(通常来说)意味着测试类的接口,这意味着它的公共(和受保护的)方法。当然,您可以“黑”此问题的解决方案(即使仅通过将方法公开),但您可能还需要考虑:

  1. 如果要测试的方法确实值得测试,那么将其移到自己的类中可能是值得的。
  2. 向调用私有方法的公共方法添加更多测试,测试私有方法的功能。(正如评论员所指出的,只有当这些私有方法的功能确实是公共接口的一部分时,才应该这样做。如果它们实际执行对用户隐藏的功能(即单元测试),这可能是不好的)。


查看完整回答
反对 回复 2019-07-01
?
慕斯709654

TA贡献1840条经验 获得超5个赞

测试私有方法可能没有用。然而,有时我也喜欢从测试方法中调用私有方法。大多数情况下,为了防止测试数据生成中的代码重复.

Microsoft为此提供了两种机制:

存取器

  • 转到类定义的源代码
  • 右键单击类的名称。
  • 选择“创建私有访问器”
  • 选择应该创建访问器的项目=>您将得到一个名为foo_accessor的新类。此类将在编译期间动态生成,并对所有可公开的成员进行奖励。

然而,当涉及到原始类接口的更改时,这种机制有时有点棘手。所以,大多数时候我都避免使用这个。

私隐对象类另一种方法是使用Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject

// Wrap an already existing instancePrivateObject accessor = new PrivateObject( objectInstanceToBeWrapped );// Retrieve a private fieldMyReturnType accessiblePrivateField = (MyReturnType) accessor.GetField( "privateFieldName" );// Call a private methodaccessor.Invoke( "PrivateMethodName", new Object[] {/* ... */} );


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 1254 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信