“增强”组合框的所需功能是一种快速查找方法。组合框中的每个项目都有一个 ToString() 方法,以便它们可以显示在下拉列表中。单击下拉列表中的项目时,组合框的观察者会收到选择通知。
此外,每次组合框中输入的文本发生变化时,都会生成一个“候选人”列表,该列表由下拉列表中包含迄今为止输入的文本的所有项目组成。按 Enter 会将您带到该列表中的第一个候选人,反复按 Enter 循环您通过列表。
我已经通过从 ComboBox 派生来实现了这个功能——我认为这是有道理的,因为我仍然在功能上留下了一个组合框,它只是添加了这个“快速查找”功能。但是,创建候选列表并循环遍历它的逻辑虽然简单,但并非完全不重要,并且会进行一些测试。
然而,正如这里所看到的,仅仅通过构建它并刺激我添加的额外例程来测试 ComboBox 似乎并不那么容易 - 它需要存在于一个表单中,以便它的行为方式与它相同在应用程序中。测试一个简单的组合框的简单添加似乎太费力了!
但是,循环遍历候选对象的代码中没有任何内容特定于我的应用程序 - 我创建了一个可以在任意数量的上下文中使用的通用控件,唯一的要求是组合框中的对象具有 ToString() 方法,它无论如何,对进入普通组合框的对象施加的限制相同,并且由 C# .NET 保证。
那么,考虑到可测试性,您会将增强的功能放在哪里?