2013-03-10 135 views
2

我以单元测试开始,并且想要为已经具有实现的某些类编写测试。在类声明中使用#ifdef使实现仅在单元测试期间的调试期间可用

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

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

你觉得那是什么?我试图弄清楚如何在单元测试中使用autofac,但它对我来说味道很大。这是一个好习惯吗?

更新

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

+1

你正在使用什么语言? – 2013-03-10 22:36:18

+0

我使用C#4.5,NUnit和Moq!对于那个很抱歉! – cidico 2013-03-10 22:39:51

+0

我会建议你不要做#if DEBUG的事情。首先它是非常有创意的,你可以在你的代码库中有很多这些行。更重要的是:您正在测试不同的代码,然后将用于生产。 – 2013-03-10 22:47:55

回答

4

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

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

[assembly: InternalsVisibleTo("AssemblyB")] 

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

另一种选择就是让类和接口的公共并将其移动到

MyProduct.xxx.yyy.Internal 

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

+0

嗨,Petar!谢谢你的帮助!为了加快IoC和DI的概念,我确实将实现更改为内部实现(它们曾经是公共的,并且与接口位于同一个程序集中)。这样做,其他成员不能从允许的范围外调用新的Class()! – cidico 2013-03-10 22:47:58

+0

教会我一些新的东西!谢谢! +1 – 2013-03-10 22:50:36

相关问题