为UNITTESTS构建配置公开方法

时间:2010-12-29 09:14:42

标签: c# .net 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
}

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

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

感谢。

2 个答案:

答案 0 :(得分:7)

您可以添加属性

[assembly: InternalsVisibleTo("ProjectName.Tests")]

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

HTH

答案 1 :(得分:0)

我不想测试私有方法。私有意味着只有声明类需要知道它们,甚至单元测试都不应该能够访问它。它为您提供的好处是,您可以随时重新设计私有部件,而不需要其他类,甚至不需要更改单元测试。只测试公共方法,他们也会间接测试私有方法。这是我的意见。