У меня есть следующий объект (упрощенный порт из Delphi) при испытании NUnit с помощью VS 2012.Необъяснимое поведение кода с помощью теста блока
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 показывает, как Истинные в отладчике, без какой-либо из моего кода того, были выполнены, что бы установить внутреннюю переменную. Конечным результатом является то, что моя загрузка по запросу не будет выполнена.
Что меняет стоимость недвижимости? В Delphi, используя DUnit, свойства класса вели себя как и ожидалось.
Может быть, потому что для проверки значения 'SampleProp' утверждение должно вызывать его значение, которое, в свою очередь, запускает' LoadFromDB() ', которое устанавливает' Loaded' в 'True'? Почему вы вручную устанавливаете «Loaded» на «True» в модульном тесте? – Adrian
Большая проблема в том, что Assert еще не выполнен! Я останавливаюсь в отладчике в строке Assert, и свойство Loaded считывает True. Когда Assert действительно запрашивает свойство, загрузка по требованию исключается из-за состояния флага. Мой большой вопрос: кто меняет состояние моей внутренней, частной переменной класса? – user2426159
Ваша личная переменная не так уж и закрыта, поскольку вы можете (и) менять ее извне. Я должен сказать, что мне показалось, что я видел, о чем вы говорите, в первый раз, когда я его запустил, - но ТОЛЬКО в первый раз, когда я начинал делать изменения ниже. Посмотрел странно, но я не смог воспроизвести его после изменений. – Plutonix