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

标签 c# unit-testing mocking

我目前正在编写一些方法来对表单控件(例如文本框、组框)执行一些基本操作,这些操作是通用的,可以在任何应用程序中使用。

我开始编写一些单元测试,只是想知道我应该使用 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 的引用并使用真正的文本框对象?还是我做错了?

注意:以上代码只是一个例子,我没有编译和运行。

最佳答案

如果您尝试通过模拟与 UI 控件的交互来对应用程序逻辑进行单元测试,您应该使用 MVC pattern 进行一些抽象。 .然后您可以只拥有一个 stub View 并从您的单元测试中调用 Controller 方法。

如果它是您尝试进行单元测试的实际控件,那么您已经找到我了。

关于c# - 使用 UI 控件的单元测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301844/

相关文章:

c++ - cpputest 错误消息分配/解除分配

javascript - 首次对返回 Observable 的方法进行 Angular Testing

javascript - 如何使用 Jest 测试函数内部的类实例

c# - 将数组插入 SQL Server 数据库问题

c# - 为什么 C# 不提供类似于 C++ 的常量?

c# - 帮助我理解 MY`Using` 和 `DataContext`

python - 构造函数中的 Magic Mock 函数

c# - : base()代码是什么

javascript - 模拟 Javascript 对象(特别是 YUI)

c# - FakeItEasy 说 MustHaveHappened 没有发生......但确实发生了