我正在用 C# 编写一个 WinForms 用户控件并想对其进行测试(不是 TDD,我首先编写组件并使其运行,但我有点厌倦了总是发现错误,所以我现在想要测试)。我的问题是我无法使子控件(弹出菜单)在测试期间变得可见。 (我意识到它不会出现 - 我不希望它出现,但我仍然想验证它在正常运行时会出现。)
相关测试代码如下:
updater.Raise(it => it.StateChanged += null, AutoUpdaterState.Ok);
[注意:以上是将引发事件的 Moq 代码;它有效,只需忽略细节并认为“引发了将导致菜单变得可见的事件”。]
Assert.IsTrue(sut.checkToolStripMenuItem.Visible);
控件中的相关代码如下:
checkToolStripMenuItem.Visible = true;
问题是...我在这一行放置了一个断点,运行后 Visible 保持为 false。我知道这可能是因为我正在测试它,而菜单实际上并没有变得可见...这没关系,但我该如何测试呢?
最佳答案
在测试 UI 代码时,如果使用某种 MVC 模式(例如 WinForms 的 MVP)正确构建它通常会简单得多(如果您还没有这样做的话)。
编写这些测试时,您甚至不应该在测试项目中引用 WinForms。我通常在 View 上有一个方法,对于您的示例,它是 ShowPopupMenu()。我测试的是在某些情况下presenter会调用这个方法。具体的方法我不测试,因为我把这些简单的东西留给了UI,反正99%的逻辑都在presenter里;并显示弹出菜单需要一行代码...
但是,如果您没有 MVP,有一些库可以帮助您测试 WinForms,例如 NUnitForms .
关于c# - 测试 WinForms 用户控件 - 子控件保持隐藏状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6592072/