2013-03-10 131 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

相關問題