我使用VS2012单元测试进行集成测试。我的大型和庞大的对象模型直接针对SQL数据库编写。我知道,我知道,但就是这样。这不是一个小项目。设计存在一些问题,但我们将继续讨论实际问题......
是否有更好的测试资源管理器允许我通过SQL存储过程名称,它调用的函数(嵌套测试)以及调用它的函数来有效地对测试进行分组。以及显示NCrunch类型代码覆盖率。
我刚刚编写的一些代码的陈腐而又有效但又有效的例子。
Stored Procedures: GetUser (@UserID)
GetPermissions(@UserID, @Element)
班级用户:
Public Function GetUserFromDb(userId As Integer) As User
'... sql command etc for GetUser
FillUserFromReader(myUserInstance, myDataReader)
End Function
Public Shared Function FillUserFromReader(instance As User, r As SqlDataReader)
instance.ID = CStr(r("ID"))
instance.Name = CStr(r("Name"))
instance.Initials = CStr(r("Initials"))
End Function
另一个名为权限的类......
'Returns both permission and user on same row...
Public Function GetPermissionsFromDb(userId As Integer) As UserPermission
'... sql command for GetPermissions
'use similar FillPermissionsFromReader as above
myPermissionsInstance.User = New User()
User.FillUserFromReader(myPermissions.User, myDataReader)
End Function
我的测试看起来像:
<TestCategory("Runs GetUserFromDb"),
TestCategory("Calls GetUser"),
TestCategory("Runs User.FillUserFromReader")> 'sproc then .net category
Public Sub GetUserTest()
Dim u = User.GetUser(1)
Assert.IsNotNull(u) 'etc
Assert.IsTrue(u.Name = "Tom")
End Sub
<TestCategory("Calls GetPermissions"),
TestCategory("Runs Permissions.GetPermissionsFromDb"),
TestCategory("Runs Permissions.FillPermissionsFromReader")
TestCategory("Runs GetUserFromDb"),
TestCategory("Calls GetUser"),
TestCategory("Runs User.FillUserFromReader")> 'sproc then .net category
Public Sub GetPermissionTest()
Dim p = Permissions.GetPermissions(1)
Assert.IsNotNull(p) 'etc
Assert.IsTrue(p.User.Name = "Tom")
End Sub
你能看到我在这里做什么吗?!这是一个很小的例子。当我更改一个sproc时,我可以快速找到“Calls ...”然后运行所有使用该过程的测试。这是一个烂摊子,是否有更好的解决方案(不涉及代码重组或编写我自己的测试资源管理器)?
注意:我故意不使用TestPropertyAttribute
,因为它在测试资源管理器中没有分组两次。所以它只会出现在其中一个属性“群组”中。
答案 0 :(得分:1)
在VS 2012季度更新1(参考http://blogs.msdn.com/b/visualstudioalm/archive/2012/11/26/visual-studio-and-team-foundation-server-2012-update-1-now-available.aspx)中,我们添加了按特征支持分组,允许您按TestCategory分组。
在您的情况下,测试可能会出现在多个类别中(我相信您正在寻找它!)。
HTH 帕特里克 MSFT VS-ALM团队。