Events 集成测试中FileSystemWatcher未引发的事件?

Events 集成测试中FileSystemWatcher未引发的事件?,events,integration-testing,mstest,filesystemwatcher,Events,Integration Testing,Mstest,Filesystemwatcher,我正在尝试对我的类运行集成测试,以确保引发我期望引发的事件: '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._localFi

我正在尝试对我的类运行集成测试,以确保引发我期望引发的事件:

    '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
我在OneNetworkFileChange子模块中设置了一个断点。该断点从未命中。我已经验证了ChangeNetworkFile中的文件实际上正在更改,我甚至复制了代码(硬编码路径除外),并将其复制到我在单元测试期间运行的windows应用程序中。它在我的windows应用程序中工作。我在这里遗漏了什么?

可能是过滤器(string.Empty),它显然只查看没有扩展名的文件(这是一个假设)

请尝试
“*.*”
或类似的方法:

_watcher = New FileSystemWatcher(value.Replace(Path.GetFileName(value), string.Concat("*.", Path.GetExtension(value))))
可能是过滤器(string.Empty),它显然只查看没有扩展名的文件(这是一个假设)

请尝试
“*.*”
或类似的方法:

_watcher = New FileSystemWatcher(value.Replace(Path.GetFileName(value), string.Concat("*.", Path.GetExtension(value))))

经过一些测试,终于找到了答案。上面EventCalled从来都不是真的原因是测试的“windows消息泵”被阻塞了。事件将被触发,但只有在测试完成后才会触发(当然,这很晚)。那么你如何修复它呢?它有点凌乱,我不喜欢它,但我引用了System.Windows.Forms.dll&名为
Application.DoEvents()

集成测试不是单元测试 公共子更改\u网络\u文件\u导致\u事件\u引发() 这被称为布尔值 Dim deployChk=新TRSDeploymentCheck(“foo”) deployChk.\u localFile=Path.Combine(AppDomain.CurrentDomain.BaseDirectory,“TestFiles\SameLocalGUIDFile.txt”) AddHandler deployChk.DeploymentRequired,Sub()EventCalled=True deployChk.NetworkFileLocation=Path.Combine(AppDomain.CurrentDomain.BaseDirectory,“TestFiles\sameneguidfile.txt”) ChangeNetworkFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,“TestFiles\sameneguidfile.txt”)) Application.DoEvents() Assert.IsTrue(EventCalled) 端接头
直到有人告诉我一个更好的方法,这似乎就是解决方案。

经过一些测试,终于找到了答案。上面EventCalled从来都不是真的原因是测试的“windows消息泵”被阻塞了。事件将被触发,但只有在测试完成后才会触发(当然,这很晚)。那么你如何修复它呢?它有点凌乱,我不喜欢它,但我引用了System.Windows.Forms.dll&名为
Application.DoEvents()

集成测试不是单元测试 公共子更改\u网络\u文件\u导致\u事件\u引发() 这被称为布尔值 Dim deployChk=新TRSDeploymentCheck(“foo”) deployChk.\u localFile=Path.Combine(AppDomain.CurrentDomain.BaseDirectory,“TestFiles\SameLocalGUIDFile.txt”) AddHandler deployChk.DeploymentRequired,Sub()EventCalled=True deployChk.NetworkFileLocation=Path.Combine(AppDomain.CurrentDomain.BaseDirectory,“TestFiles\sameneguidfile.txt”) ChangeNetworkFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,“TestFiles\sameneguidfile.txt”)) Application.DoEvents() Assert.IsTrue(EventCalled) 端接头
直到有人告诉我一个更好的方法,这似乎是解决办法。

是的,不是这样。我很确定这不是因为正如我上面所说,我将代码按原样粘贴到一个单独的应用程序中,它工作得非常完美。我不知道mstest正在做的事情是否因为某种原因而挤压了比赛。是的,不是这样。我很确定这不是因为正如我上面所说,我将代码按原样粘贴到一个单独的应用程序中,它工作得非常完美。我不知道mstest正在做的事情是否出于某种原因挤压了事件。嗯,我从来没有听说过它们是这样触发的。一件事是,您不必担心以线程安全的方式处理事件。就我个人而言,我已经不再依赖它了,我更喜欢在一个单独的线程中进行轮询(不过我想我现在知道它为什么会失败了)。嗯,我从来没有听说过它们是这样触发的。一件事是,您不必担心以线程安全的方式处理事件。就我个人而言,我已经不再依赖它,而是更喜欢在一个单独的线程中进行轮询(不过我想我现在知道它当时失败的原因了)。
        '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