为UNITTESTS构建配置公开方法

Vic*_*din 1 .net c# nunit

我正在为我的项目进行单元测试.应该为.Net 2.0构建具有业务逻辑的DLL,但我想使用Moq进行测试(它需要.Net 3.5).这就是为什么我已经将所有测试转移到单独的.Net 3.5项目中,参考业务逻辑项目.我需要测试一些方法,从我的测试项目中标记为内部.我可以看到使用带有条件构建符号的单独构建配置的唯一方法:

#if UNITTESTS
public
#else
internal
#endif
int DoSomeAction(int param1, int param2) 
{
    // some logic that need to be tested here
}
Run Code Online (Sandbox Code Playgroud)

但是这种代码看起来很难看.也许有更好的方法,比如标记方法的一些特殊属性:

[ConditionalPublic("UNITTESTS")]
internal int DoSomeAction(int param1, int param2) 
{
    // some logic that need to be tested here
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Sim*_*one 7

您可以添加该属性

[assembly: InternalsVisibleTo("ProjectName.Tests")]
Run Code Online (Sandbox Code Playgroud)

(它来自System.Runtime.CompilerServices)到您的项目assembly.cs.现在您的测试项目可以访问内部.

HTH