統合テストには 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
Permissions と呼ばれる別のクラス...
'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
はテスト エクスプローラーで 2 回グループ化されないため、意図的に使用していません。したがって、プロパティ「グループ」の 1 つにのみ表示されます。