如何测试控件是否集中在C#Windows窗体中?

时间:2016-02-18 05:20:04

标签: c# winforms unit-testing

    /// <summary>
    ///Tests the reset form button
    ///</summary>
    [TestMethod()]
    public void frmResetLinkTestNo()
    {
        frmQuote_Accessor target = new frmQuote_Accessor();
        AutomotiveManager_Accessor._isBeingTested = true;
        AutomotiveManager_Accessor._messageBoxResult = DialogResult.No;

        target.txtVehicleSalesPrice.Text = "1000";

        object sender = null;
        EventArgs e = new EventArgs();

        target.lnkReset_Click(sender, e);
        // This assert fails
        Assert.AreEqual(true, target.txtVehicleSalesPrice.Focused);
        Assert.AreEqual("1000", target.txtVehicleSalesPrice.SelectedText);
    }

方法调用target.lnkReset_Click(sender, e)触发一个事件处理程序,该事件处理程序显示一个返回YES或NO结果的对话框。如果用户按YES或NO,则会聚焦名为txtVehicleSalesPrice的表单的第一个文本框元素。当我手动测试它时,此功能有效,但如果元素被聚焦,则无法获得准确的结果。第二个断言检查是否选择了文本。

单元测试需要做些什么才能检查表单元素是否已被聚焦?

2 个答案:

答案 0 :(得分:0)

我没有明白你的意思。 但是如果你想检查一个控件(例如Button1)是否有焦点。 你可以用这个:

if (Button1.Focused){
    MessageBox.Show("The button is focused");
}

答案 1 :(得分:-2)

好吧,我会说你需要模仿'YES'和'NO'的对话框。使用此模拟,您可以强制表单以您希望的方式运行。然后检查该字段是否确实是焦点。

您可以简单地在构造函数中构建对话框并将其设置在公共属性中,或者您可以创建一个可模拟的IYesNoDialog工厂来生成多个。最好的方法是使用接口抽象表单,如下例所示。

public interface IYesNoDialog {
    // DialogResult, I guess...
    // Whatever methods you need here to open the Dialog and control it.
}

public class YesNoDialog: Form, IYesNoDialog {
    //Implementation of the dialog here...
}

public class WhateverForm: Form {
    public IYesNoDialog YesNoDialog { get; set;}

    public WhateverForm() {
        this.YesNoDialog = new YesNoDialog();
    }
}

**如果我误用了基本类型,请抱歉。我的WinForms背景很远,但概念保持不变。