在类声明中使用#ifdef使实现仅在调试期间可用于单元测试目的

时间:2013-03-10 22:32:08

标签: c# unit-testing nunit moq

我从单元测试开始,我想为已经有实现的一些类编写测试。

我们正在开发这个项目中的接口,我想它在编写单元测试时会有所帮助。 但是接口实现被标记为内部,我迄今为止测试实现的最佳解决方案是:

#if DEBUG
public class CreateRequestService : DomainServiceBase, ICreateRequestService
#else
internal class CreateRequestService : DomainServiceBase, ICreateRequestService
#endif
{

你怎么看?我试图弄清楚如何在单元测试中使用autofac,但它给我带来了很多味道。这是一个好习惯吗?

更新

我忘了指定我正在使用的工具。我正在使用C#4.5,NUnit和Moq!

1 个答案:

答案 0 :(得分:4)

几年前我常常隐藏类和接口。停止这样做,只有在我开发库时才会使用它。

如果您使用.NET,则可以制作“朋友组件”。这样单元测试组件可以看到生产组件的内部成员。但为此您需要访问生产程序集中的代码(您需要添加程序集属性)。

[assembly: InternalsVisibleTo("AssemblyB")]

http://msdn.microsoft.com/en-us/library/0tke9fxk.aspx

另一个选择是简单地将类和接口公开并将它们移动到

 MyProduct.xxx.yyy.Internal 

命名空间。这样你就可以测试,团队的每个成员都知道不应该使用这些成员。