我正在用C#编写一个WinForms用户控件并且想要测试它(不是TDD,我开始编写组件并使其工作,但我有点厌倦总是发现错误,所以我现在想要测试)。我的问题是我无法在测试期间使子控件(弹出菜单)变得可见。 (我意识到它不会出现 - 我不会希望它出现,但我仍然想验证它正常运行时 会显示出来。)
以下是相关的测试代码:
updater.Raise(it => it.StateChanged += null, AutoUpdaterState.Ok);
[注意:以上是将引发事件的Moq代码;它有效,只是忽略细节,并认为“会导致菜单变得可见的事件”。]
Assert.IsTrue(sut.checkToolStripMenuItem.Visible);
这是控件中的相关代码:
checkToolStripMenuItem.Visible = true;
问题是......我在这一行上设置了一个断点,并且在运行它之后Visible保持为假。我理解这可能是因为我正在测试它,菜单实际上并不可见......这没关系,但我该如何测试呢?
答案 0 :(得分:1)
在测试UI代码时,如果使用某种MVC模式正确构建它通常会更简单,例如WinForms的MVP(如果你还没有这样做)。
当您编写这些测试时,您甚至不应该在测试项目中引用WinForms。我通常在视图上有一个方法,对于你的例子,它将是ShowPopupMenu()。我测试的是,在某些情况下,演示者会调用此方法。我没有测试特定的方法,因为我把这些简单的东西留给UI,99%的逻辑无论如何都在演示者中;并显示弹出菜单需要一行代码......
但是,如果你没有MVP,有些库可以帮助你测试WinForms,比如NUnitForms。