VS 2012 を使用した NUnit テストの下に、次のオブジェクト (Delphi からの簡略化されたポート) があります。
Public Class Class1
Private fLoaded As Boolean
Private fSample As String
Private Sub LoadFromDB()
If (fLoaded) Then
Exit Sub
End If
fLoaded = True
' fDataModule.LoadFromDB(Me)
End Sub
Public Property SampleProp() As String
Get
LoadFromDB()
Return fSample
End Get
Set(ByVal value As String)
fSample = value
End Set
End Property
Public Property Loaded() As Boolean
Get
Return fLoaded
End Get
Set(ByVal value As Boolean)
fLoaded = value
End Set
End Property
End Class
オブジェクトは、そのプロパティがアクセスされたときにロード オン デマンドを実行すると想定されています。次の Nunit クラスはプロパティをテストしています。
Imports NUnit.Framework
<TestFixture> _
Public Class TestClass1
<Test()> _
Public Sub TestProperties()
Dim TheClass As Class1
TheClass = New Class1
TheClass.Loaded = True
TheClass.SampleProp = "Sample"
TheClass.Loaded = False
Assert.AreEqual("Sample", TheClass.SampleProp)
End Sub
End Class
発生する問題は、Assert ステートメントにブレークポイントがあると、クラス プロパティ Loaded がデバッガーで True として表示され、内部変数を設定するコードが実行されていないことです。最終的に、オンデマンド ロードは実行されません。
物件の価値を変えるとは?Delphi では、DUnit を使用して、クラス プロパティが期待どおりに動作しました。