我有一個F#庫,裏面有很多我想測試的非公開內容。目前,所有不屬於程序集公共API的代碼都標記爲internal
(具體來說,它放置在標記爲internal
的模塊中)。我使用InternalsVisibleToAttribute
使此代碼對我的測試程序集可見。然而,爲了讓測試程序集編譯,在簽名中使用內部類型的所有測試(其中大部分是因爲我使用FsCheck來自動生成測試輸入)也必須標記爲內部(這需要應用於每個函數,因爲內部模塊不會被xunit發現)。此外,任何專門用於FsCheck生成的類型(例如,type ValidCustomer = ValidCustomer of Customer
,其中Customer
是我的內部域類型)也需要標記爲內部類型,並且在創建內部類型時FsCheck似乎會卡住,因此測試無法運行。可以測試內部代碼而不必將測試代碼標記爲內部代碼?
有沒有什麼辦法可以測試內部F#代碼(來自單獨的測試程序集)而不必將所有依賴內部類型的測試標記爲內部?現在我只是傾向於在原代碼中根本沒有做任何內部的事情,但理想情況下,有一種方法可以讓我的清潔API蛋糕也吃掉。
爲什麼你的*域*類型是內部的?除非您使用與[DDD](http://amzn.to/WBCwx7)大不相同的術語,否則域模型是您的應用程序中最重要的部分。這是應用程序首先存在的原因... –
@MarkSeemann或許*域類型*是錯誤的術語。在這種特殊情況下,它是一個單獨的項目,它從數據倉庫數據庫中讀取數據,彙總銷售數據等,並將這些數據公開給Web API。 API主要獲取數字數據,但是有很多內部的,很好的域類型(客戶,訂單等等 - 他們正在對域進行建模,儘管它們不在本項目之外使用),用於生成彙總數據。 – cmeeren
好的,但是使這些類型成爲內部的動機是什麼? –