如何检查控件上是否设置了工具提示

时间:2014-04-28 07:20:28

标签: c# winforms tdd tooltip nunit

我们说我在(部分)方法中获得了以下代码:

ToolTip tip = new ToolTip();
Control ctrl = new Control();
tip.SetToolTip(ctrl, String.Empty);

我想在测试中声明在tipctrl相关联的特定情况下。以下调用不够:

Assert.AreEqual(String.Empty, tip.GetToolTip(ctrl));

无论上述方法体是否被执行,该调用都会成功。我正在寻找类似的东西:

ToolTip t = GetTooltipForControl(ctrl);
Assert.IsNotNull(t);
当没有工具提示与控件关联时,

GetTooltipForControl应该返回null,并且应该返回ToolTip实例。可以这样做吗?

提醒:我个人只需要这个逻辑进行单元测试/回归测试,以便以TDD方式修复错误。

2 个答案:

答案 0 :(得分:1)

无法找到如何设置工具提示的方法,如果已设置为空。一种方法可以是创建自定义控件并使用它而不是标准控件。 喜欢:

public class CustomLabel : Label
{
    public bool isTooltipSet
    {
        get;
        set;
    }

    public void SetToolTip()
    {
        ToolTip tt = new ToolTip();
        tt.SetToolTip(this, string.Empty);
        isTooltipSet = true;
    }
}

然后你可以用以下方式检查:

CustomLabel lbl = new CustomLabel();
lbl.SetToolTip();
Assert.AreEqual(true, lbl.isToolTipSet);

为什么需要设置并检查空工具提示?也许有更好的方法来做到这一点。也许您可以设置一些文本,但将tooltip的Active属性设置为false

ToolTip tt = new ToolTip();
tt.Active = false;
Control cc = new Control();
tt.SetToolTip(cc, "text");
Assert.AreEqual("text", tt.GetToolTip(cc));

编辑: 还有一个想法是不那么超级hacky并且需要更少的重构。您可以设置扩展方法来设置工具提示,您可以在其中将工具提示文本存储到Control.Tag属性中。

public static class Extensions
{
    public static void SetToolTip(this Control ctrl, ToolTip tt, string text)
    {
        tt.SetToolTip(ctrl, text);
        ctrl.Tag = text;
    }
}

然后断言:

Assert.AreEqual(string.Empty, (string)ctrl.Tag);
未调用扩展方法(string)ctrl.Tag时,

SetToolTip将为null;使用sting.Empty参数调用string.Empty时,<{1}}将为{{1}}

答案 1 :(得分:0)

string.IsNullOrWhiteSpace应该检查一下:

Assert.IsTrue(!string.IsNullOrWhiteSpace(tip.GetToolTip(ctrl));