leo*_*ora 123 c# unit-testing scope
我们将所有单元测试都放在他们自己的项目中.我们发现我们必须将某些类公开而不是内部仅用于单元测试.无论如何都要避免这样做.通过将类公开而不是密封来实现内存含义是什么?
Ash*_*Ash 197
如果您使用的是.NET,则InternalsVisibleTo程序集属性允许您创建"朋友"程序集.这些是特定的强名称程序集,允许访问内部类和其他程序集的成员.
请注意,这应该谨慎使用,因为它紧密耦合相关的组件.InternalsVisibleTo的常见用途是用于单元测试项目.由于上述原因,它可能不适合在您的实际应用程序集中使用.
例:
[assembly: InternalsVisibleTo("NameAssemblyYouWantToPermitAccess")]
namespace NameOfYourNameSpace
{
Run Code Online (Sandbox Code Playgroud)
小智 18
以下是在.NET Core应用程序中使用的方法。
[assembly: InternalsVisibleTo("AssemblytoVisible")]<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>Test_Project_Name</_Parameter1> <!-- The name of the project that you want the Internal class to be visible To it -->
</AssemblyAttribute>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息,请关注https://improveandrepeat.com/2019/12/how-to-test-your-internal-classes-in-c/
如果它是一个内部类,那么它不能被孤立地使用.因此,除了测试在内部使用该对象的其他类之外,您不应该真正测试它.
正如您不应该测试类的私有成员一样,您不应该测试DLL的内部类.这些类是一些可公开访问的类的实现细节,因此应该通过其他单元测试来很好地执行.
这个想法是你只想测试一个类的行为,因为如果你测试内部实现细节,那么你的测试将是脆弱的.您应该能够在不破坏所有测试的情况下更改任何类的实现细节.
如果您发现确实需要测试该类,那么您可能想要首先重新检查该类为什么是内部的.