2012-04-03 110 views
0

我有一個擁有15個成員的實體。有各種類型的成員應用了各種規則,其中一些允許空值,另一些則不允許。這裏是數據庫實體:我應該如何測試這個

tbl_items(
item_id bigint identity(1,1) not null primary key, 
item_category bigint null foreign key references tbl_categories(category_id) on delete set null, 
item_model nvarchar(50) not null, 
item_brand nvarchar(50) not null, 
item_color nvarchar(20) not null, 
item_made_in nvarchar(20) null, 
item_desc nvarchar(100) null, 
item_price decimal not null, 
item_image varbinary(max) null, 
item_monetary_unit nvarchar(10) not null, 
item_rating int null, 
item_date datetime not null, 
item_quantity int not null 
) 

單元測試的所有國家的數據項都不可能將我的單元測試類(ItemTest)有超過1000行代碼。那麼我需要爲每個數據狀態編寫一個測試方法嗎?或者我應該只考慮編寫測試方法的無效狀態?像財產不可空時一樣。

+0

當你說「單元測試所有狀態」時,你是什麼意思?明顯的事情要測試將提供隨機值的表,看看它是否持有水。 PK和FK測試同樣重要。您的問題更清晰一些,可以幫助我們更好地理解它。 – rvphx 2012-04-03 18:05:30

+0

id可能是空字符串,字符串,負數,零,大於bigint大小。你應該爲每種狀態編寫測試方法嗎? – jim 2012-04-03 18:49:40

回答

1

如果您使用NUnit的或類似的東西,有兩個概念,這將有助於這一點:

  1. 測試用例讓你在參數傳遞到提取出來的測試方法:http://nunit.org/?p=testCase&r=2.5
  2. 測試理論允許您自動創建所有可能的輸入。警告:這些可以創建非常慢的測試,所以謹慎小心地使用。 http://nunit.org/index.php?p=theory&r=2.5

至於你應該單元測試什麼,這個問題的答案差異很大。有些人在控制器層編寫跨層驗收測試。有些人嘲笑所有的依賴關係並編寫單獨的單元測試。你必須看到你和你的團隊想要做什麼,並嘗試不同的策略。就個人而言,對於您所描述的情況,我會爲您的驗證功能編寫一個通用測試。然後,爲所有真正獨特的案例編寫一個TestCase。

+0

非常感謝,但我應該測試什麼?映射?驗證?商業規則? – jim 2012-04-03 18:48:25

+0

用我的意見更新了答案,但答案真的會因團隊和項目而異 – Milimetric 2012-04-04 00:40:04

1

你究竟在測試什麼?如果您正在測試從對象到數據庫的映射,我會寫一個測試,證明我可以插入數據,以便來自對象的值最終位於正確的數據庫字段中,然後退出。

+0

嗯,我剛開始單元測試。我應該單元測試映射,驗證和商業規則嗎?我的意思是你應該單元測試「一切」嗎?如果是的話,這將花費大量的時間,並將編寫代碼方面的三倍規模的項目。 – jim 2012-04-03 18:47:30

+0

理想情況下,應該針對單元測試中的業務規則。這給你更多的價值IMO。 – Spock 2012-04-03 21:57:45

+0

@Raj:是的。因爲他正在進行關於空值的研究,我認爲必須沒有業務邏輯來測試,否則他會這樣做。 – 2012-04-04 13:08:57