1

クラスで統合テストを実行して、発生すると予想されるイベントが発生することを確認しようとしています。

    'integration test not unit test
<TestMethod()>
Public Sub Change_Network_File_Causes_Event_To_Be_Raised()
    Dim EventCalled As Boolean
    Dim deployChk = New TRSDeploymentCheck("foo")
    deployChk._localFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestFiles\SameLocalGUIDFile.txt")
    AddHandler deployChk.DeploymentNeeded, Sub() EventCalled = True
    deployChk.NetworkFileLocation = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestFiles\SameNetGUIDFile.txt")
    ChangeNetworkFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestFiles\SameNetGUIDFile.txt"))
    Assert.IsTrue(EventCalled)


End Sub

クラスで FileSystemWatcher オブジェクトをセットアップする方法は次のとおりです。

    Friend Property NetworkFileLocation As String
    Set(value As String)
        _netFileLoc = value
        If File.Exists(value) Then
            _watcher = New FileSystemWatcher(value.Replace(Path.GetFileName(value), String.Empty))
            _watcher.EnableRaisingEvents = True
            AddHandler _watcher.Changed, AddressOf OnNetworkFileChanged
        End If
    End Set
    Get
        Return _netFileLoc
    End Get
End Property  

Private Sub OnNetworkFileChanged(source As Object, e As FileSystemEventArgs)
    If IsDeploymentNeeded() Then RaiseEvent DeploymentNeeded()
End Sub

OneNetworkFileChangeサブにブレークポイントを設定しました。ブレークポイントにヒットすることはありません。ChangeNetworkFileでファイルが実際に変更されていることを確認しました。コードをコピーし (パスのハードコーディングを除く)、単体テスト中に実行した Windows アプリにコピーしました。それは私のWindowsアプリで動作しました。ここで何が欠けていますか?

4

2 に答える 2

1

いくつかのテストの後、最終的にそれを理解しました。上記の EventCalled が true にならない理由は、テストの「Windows メッセージ ポンプ」がブロックされているためです。イベントは発生しますが、テストが完了した後でのみ発生します (もちろん、これは遅すぎます)。それで、どうやってそれを修正しますか?面倒で好きではありませんが、System.Windows.Forms.dllを参照して呼び出しましたApplication.DoEvents()

        'integration test not unit test
<TestMethod()>
Public Sub Change_Network_File_Causes_Event_To_Be_Raised()
    Dim EventCalled As Boolean
    Dim deployChk = New TRSDeploymentCheck("foo")
    deployChk._localFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestFiles\SameLocalGUIDFile.txt")
    AddHandler deployChk.DeploymentNeeded, Sub() EventCalled = True
    deployChk.NetworkFileLocation = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestFiles\SameNetGUIDFile.txt")
    ChangeNetworkFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestFiles\SameNetGUIDFile.txt"))
    Application.DoEvents()
    Assert.IsTrue(EventCalled)

End Sub

より良い方法を教えてくれるまで、これが解決策のようです。

于 2012-08-20T13:42:48.840 に答える
0

おそらく、拡張子のないファイルのみを表示するフィルター (string.Empty) です (これは仮定です)。

または次のようなものを試してください"*.*"

_watcher = New FileSystemWatcher(value.Replace(Path.GetFileName(value), string.Concat("*.", Path.GetExtension(value))))
于 2012-08-18T20:25:16.077 に答える