猿问

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

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

我正在构建一个类库,它将包含一些公共和私有方法。我希望能够对私有方法进行单元测试(主要是在开发过程中,但也可能对将来的重构很有用)。

正确的方法是什么?


饮歌长啸
浏览 1292回答 3
3回答

森栏

如果要对私有方法进行单元测试,可能会出现问题。单元测试(通常来说)意味着测试类的接口,这意味着它的公共(和受保护的)方法。当然,您可以“黑”此问题的解决方案(即使仅通过将方法公开),但您可能还需要考虑:如果要测试的方法确实值得测试,那么将其移到自己的类中可能是值得的。向调用私有方法的公共方法添加更多测试,测试私有方法的功能。(正如评论员所指出的,只有当这些私有方法的功能确实是公共接口的一部分时,才应该这样做。如果它们实际执行对用户隐藏的功能(即单元测试),这可能是不好的)。

慕斯709654

测试私有方法可能没有用。然而,有时我也喜欢从测试方法中调用私有方法。大多数情况下,为了防止测试数据生成中的代码重复.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[] {/* ... */} );
随时随地看视频慕课网APP
我要回答