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

C# 如何测试控件是否集中在C Windows窗体中?,c#,winforms,unit-testing,C#,Winforms,Unit Testing,方法调用target.lnkReset_Clicksender,e会触发一个事件处理程序,该事件处理程序显示一个返回YES或NO结果的对话框。如果用户按YES或NO,则表单中名为txtVehicleSalesPrice的第一个文本框元素将被聚焦。当我手动测试它时,这个功能可以工作,但是如果元素被聚焦,我就无法得到准确的结果。第二个断言检查是否选中了文本 单元测试需要做什么才能检查表单元素是否集中?我没有完全理解您的意思。 但是,如果您想检查控件按钮1(例如)是否聚焦。 您可以使用以下选项:

方法调用target.lnkReset_Clicksender,e会触发一个事件处理程序,该事件处理程序显示一个返回YES或NO结果的对话框。如果用户按YES或NO,则表单中名为txtVehicleSalesPrice的第一个文本框元素将被聚焦。当我手动测试它时,这个功能可以工作,但是如果元素被聚焦,我就无法得到准确的结果。第二个断言检查是否选中了文本


单元测试需要做什么才能检查表单元素是否集中?

我没有完全理解您的意思。 但是,如果您想检查控件按钮1(例如)是否聚焦。 您可以使用以下选项:

    /// <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);
    }

嗯,我想说你需要模仿对话中的“是”和“否”。使用此模拟,您可以强制窗体按您希望的方式运行。然后检查磁场是否确实聚焦

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

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

**对不起,如果我误用了基本类型。我的WinForms背景相当远,但概念仍然相同。

Show在构造函数中调用?这对我来说有点不寻常。请检查target.ActiveControl返回什么?@defaultlocale实际上我在父窗体中调用它是错误的。并且target.ActiveControl在自动完成中没有选项。我猜是因为表单还没有显示?如果表单还没有显示,TextBox.Focused将返回false。您可能需要在测试中调用target.Show。应该可以访问anyway@defaultlocale我也不能让这部戏开始工作。可能是因为我在使用访问器类?Control.Focused没有帮助吗?如果没有,请尝试Form.ActiveControl甚至Form.Focused本身。
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();
    }
}