public static void DrawText(IDeviceContext dc, string text, Font font, Point pt, Color foreColor, TextFormatFlags flags);
我有一个针对我的ExtendedComboBox的测试器应用程序。 以下代码中给出的所有String项目都存在于我的测试器应用程序中的ComboBox项目中。如何对上述方法进行单元测试,因为它返回void? 测试TextRenderer.Drawtext的另一种方法是什么?是否有任何替代测试OnDrawItem方法来绘制ComboBox文本。
[TestMethod()]
public void ExtendedComboBoxOnDrawPrefixTest()
{
ExtendedComboBox cboTest = new ExtendedComboBox ();
// List of strings having special characters.
string[] items = {
"&One",
"T&wo",
"E!xclamation",
"Am@persat",
"H#ash",
"Dollar$Sign",
"Perc%ent",
"Ci^rcumflex",
"Ast*erisk",
"Hy-phen",
"Und_erscore",
"pl+us",
"Equ=als",
"Col:on",
"Semi;colon",
"Co'mma",
"Inverted\"Comma",
"Apos'trophe",
"Pip|e",
"Open{Brace",
"Close}Brace",
"OpenBr[acket",
"CloseBr]acket",
"BackS\\lash",
"ForwardSl/ash",
"LessT<han",
"Greate>rThan",
"Questio?nMark",
"Do.t",
"Three",
"Four",
"Five",
"Six",
"This is a really extremely long string value for a combobox to display."
};
cboTest.Items.AddRange(items);
// To test that all the items have the same kind of prefixes
for (int index = 0; index < cboTest.Items.Count; index++)
{
String expectedText = GetExtendedComboBoxText(cboTest, items[index]);
Assert.AreEqual(items[index], , String.Format("Item '{0}' returned an string", cboTest.Items[index]));
}
}
/// <summary>
/// Compare the ComboBoxText of the passed string with respect to the DC, Font, ForeColor and TextFormatFlags.
/// Draw the item
/// </summary>
private string GetExtendedComboBoxText(Control cboTest, string itemToTest)
{
TextFormatFlags textFormatflags = TextFormatFlags.NoPrefix;
Color foreColor = SystemColors.HighlightText;
return (TextRenderer.DrawText(cboTest.CreateGraphics(), itemToTest, cboTest.Font, new Point(cboTest.Bounds.X, cboTest.Bounds.Y), foreColor, textFormatflags)).Text;
}
答案 0 :(得分:8)
它是BCL方法,您不应该验证BCL方法的行为。
在UTs中有一个假设; BCL的方法和类正常工作。如果您验证了BCL的方法,那么您必须验证int
,byte
,ToString()
等的行为...(因为您可以&#39;相信你的基础设施)
您不应该验证BCL类的行为(Microsoft
已经为您完成了......)。实际上,您应该假设该方法正常工作(而不是验证它),然后验证您正在使用具有正确参数的方法。
为了帮助我的开发人员,我创建了一个流程图,演示了当他们遇到这样的问题时如何采取行动:(在我们的R&amp; D中,我们发现它非常实用。我们喜欢它影响我们研发的方式。 ..)
在您的情况下,似乎预期的行为是可见的,因此您可以通过UI验证它作为验收/集成/组件测试的一部分......
如果您仍想将其验证为UT并且您的测试框架不允许您验证(Rhino Mocks
,Moq
等)此方法,则应该包装该方法或使用其他工具测试方法,例如MsFakes,Typemock Isolator等......
以下代码段演示了使用MsFakes
设置方法预期的方法:
[TestMethod]
public void PutExpectationOnDrawText()
{
var wasExcute = false;
System.Windows.Forms.Fakes.ShimTextRenderer
.DrawTextIDeviceContextStringFontRectangleColorTextFormatFlags =
(context, txt, font, pt, forecolor, flags) =>
{
//the asserts on the orguments...
//for example:
Assert.IsNotNull(context);
Assert.AreNotEqual(String.Empty, txt);
//...
wasExcute = true;
};
//execute the method which is use DrawText
Assert.IsTrue(wasExcute);//verify that the method was execute....
}