使用集成单元测试调用层次结构

时间:2013-01-16 12:04:10

标签: unit-testing visual-studio-2012 integration-testing mstest code-coverage

我使用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,因为它在测试资源管理器中没有分组两次。所以它只会出现在其中一个属性“群组”中。

1 个答案:

答案 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团队。