2

“增强”组合框的所需功能是一种快速查找方法。组合框中的每个项目都有一个 ToString() 方法,以便它们可以显示在下拉列表中。单击下拉列表中的项目时,组合框的观察者会收到选择通知。

此外,每次组合框中输入的文本发生变化时,都会生成一个“候选人”列表,该列表由下拉列表中包含迄今为止输入的文本的所有项目组成。按 Enter 会将您带到该列表中的第一个候选人,反复按 Enter 循环您通过列表。

我已经通过从 ComboBox 派生来实现了这个功能——我认为这是有道理的,因为我仍然在功能上留下了一个组合框,它只是添加了这个“快速查找”功能。但是,创建候选列表并循环遍历它的逻辑虽然简单,但并非完全不重要,并且会进行一些测试。

然而,正如这里所看到的,仅仅通过构建它并刺激我添加的额外例程来测试 ComboBox 似乎并不那么容易 - 它需要存在于一个表单中,以便它的行为方式与它相同在应用程序中。测试一个简单的组合框的简单添加似乎太费力了!

但是,循环遍历候选对象的代码中没有任何内容特定于我的应用程序 - 我创建了一个可以在任意数量的上下文中使用的通用控件,唯一的要求是组合框中的对象具有 ToString() 方法,它无论如何,对进入普通组合框的对象施加的限制相同,并且由 C# .NET 保证。

那么,考虑到可测试性,您会将增强的功能放在哪里?

4

1 回答 1

1

与您引用的帖子一样:将逻辑与 gui 元素分开也是这里的解决方案。

您应该考虑使用类似控制器的类,该类公开您可以将其数据绑定到您的 ComboBox 数据源的项目列表。控制器本身负责维护这个列表。

因此,每当您在 ComboBox 中键入一个字母时,您就会调用控制器上的一个函数,比如 UpdateList(string typedString)。通过这种方式,您已经分离了用“候选人”填充列表的逻辑。

现在您可以轻松编写多个测试,每个测试使用不同的参数调用 UpdateList(),然后检查项目列表。进行测试不需要 GUI 的东西,你只是在测试算法本身。

于 2009-01-28T10:17:26.567 回答