2012-04-03 178 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