我目前正在编写一些方法,对表单控件进行一些基本操作,例如TextBox,GroupBox,这些操作是通用的,可以在任何应用程序中使用.
我开始编写一些单元测试,只是想知道我应该使用System.Windows.Forms中的实际表单控件还是我应该模拟我试图测试的部分.例如:
假设我有这个控制方法,如果它是一个文本框,它将清除文本属性,如下所示:
public static void clearall(this Control control) { if (control.GetType() == typeof(TextBox)) { ((TextBox)control).Clear(); } }
然后我想测试这个方法所以我做这样的事情:
[TestMethod] public void TestClear() { List<Control> listofcontrols = new List<Control>(); TextBox textBox1 = new TextBox() {Text = "Hello World" }; TextBox textBox2 = new TextBox() { Text = "Hello World" }; TextBox textBox3 = new TextBox() { Text = "Hello World" }; TextBox textBox4 = new TextBox() { Text = "Hello World" }; listofcontrols.Add(textBox1); listofcontrols.Add(textBox2); listofcontrols.Add(textBox3); listofcontrols.Add(textBox4); foreach (Control control in listofcontrols) { control.clearall(); Assert.AreEqual("",control.Text); } }
我应该将System.Window.Forms的referance添加到我的单元测试并使用真正的TextBox对象吗?或者我做错了吗?
注意:上面的代码只是一个例子,我没有编译或运行它.
解决方法
如果您尝试通过模拟与UI控件的交互来对应用程序逻辑进行单元测试,则应使用
MVC pattern进行一些抽象.然后您可以只使用存根视图并从单元测试中调用控制器方法.
如果它是您尝试进行单元测试的实际控件,那么您就拥有了我.