我们说我在(部分)方法中获得了以下代码:
ToolTip tip = new ToolTip();
Control ctrl = new Control();
tip.SetToolTip(ctrl, String.Empty);
我想在测试中声明在tip
与ctrl
相关联的特定情况下。以下调用不够:
Assert.AreEqual(String.Empty, tip.GetToolTip(ctrl));
无论上述方法体是否被执行,该调用都会成功。我正在寻找类似的东西:
ToolTip t = GetTooltipForControl(ctrl);
Assert.IsNotNull(t);
当没有工具提示与控件关联时, GetTooltipForControl
应该返回null,并且应该返回ToolTip实例。可以这样做吗?
提醒:我个人只需要这个逻辑进行单元测试/回归测试,以便以TDD方式修复错误。
答案 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));