我应该如何对此进行单元测试

时间:2012-04-03 17:52:47

标签: sql database unit-testing testing entity

我有一个拥有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行代码。那么我需要为每个数据状态编写一个测试方法吗?或者我应该只考虑编写测试方法的无效状态?就像在属性不可为空时使用null一样。

2 个答案:

答案 0 :(得分:1)

你究竟在测试什么?如果你正在测试从对象到数据库的映射,我会写一个测试,证明我可以插入数据,以便对象的值最终出现在正确的数据库字段中,然后退出。

答案 1 :(得分:1)

如果你正在使用NUnit或类似的东西,有两个概念可以帮助解决这个问题:

  1. 测试用例允许您将参数传递给分解的测试方法:http://nunit.org/?p=testCase&r=2.5
  2. 测试理论允许您自动创建所有可能的输入。警告:这些可以创建非常慢的测试,因此请谨慎使用。 http://nunit.org/index.php?p=theory&r=2.5
  3. 就你应该进行单元测试而言,这个问题的答案差别很大。有些人在控制器层编写跨层验收测试。有些人嘲笑所有依赖项并编写独立的单元测试。您必须了解您和您的团队想要做的事情并尝试不同的策略。就个人而言,对于你所描述的情况,我会为你的验证函数编写一个通用测试。然后,为所有真正不同的案例编写一个TestCase。