当前位置:  开发笔记 > 编程语言 > 正文

使用UI控件的单元测试方法

如何解决《使用UI控件的单元测试方法》经验,为你挑选了2个好方法。

我目前正在编写一些方法,对表单控件进行一些基本操作,例如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 listofcontrols = new List();
            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对象吗?或者我做错了吗?

注意:上面的代码只是一个例子,我没有编译或运行它.



1> Cristi Diaco..:

如果您试图通过模拟与UI控件的交互来对应用程序逻辑进行单元测试,那么您应该使用MVC模式进行一些抽象.然后,您可以只有一个存根视图,并从单元测试中调用控制器方法.

如果它是您尝试进行单元测试的实际控件,那么您就拥有了我.



2> 小智..:

有几种模式可用于将UI表示与UI逻辑分离,包括模型 - 视图 - 控制器和模型 - 视图 - 演示者(AKA Humble Dialog)的各种化身.Humble Dialog专门用于简化单元测试.你绝对应该在你的设计库中拥有这些UI模式之一.

但我发现,对于简单的表单,当框架支持它时,直接针对真实的UI控件进行测试非常简单.我已经在Java Swing和Windows.Forms中构建了完全测试优先的非常强大的UI.我无法在SWT或ASP.NET中管理它并恢复到MVP.

用于测试这样的事情......

[Test] public void ShouldCopyFromAvailableToSelectedWhenAddButtonIsCLicked(){
  myForm.AvailableList.Items.Add("red");
  myForm.AvailableList.Items.Add("yellow");
  myForm.AvailableList.Items.Add("blue");

  myForm.AvailableList.SelectedIndex = 1;
  myForm.AddButton.Click();

  Assert.That(myForm.AvaiableList.Items.Count, Is.EqualTo(2));
  Assert.That(myForm.SelectedList.Items[0], Is.EqualTo("yellow"));
}

...直接针对UI控件工作正常.但是如果你想开始测试鼠标移动,击键或拖放,你最好选择一个像Brian建议的更强大的UI模式.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有