gpt4 book ai didi

c# - 如何在 C# 中对 Textrenderer.DrawText 方法进行单元测试

转载 作者:行者123 更新时间:2023-11-30 19:38:39 25 4
gpt4 key购买 nike

public static void DrawText(IDeviceContext dc, string text, Font font, Point pt, Color foreColor, TextFormatFlags flags);

我有一个用于我的 ExtendedComboBox 的测试器应用程序。下面代码中给出的所有字符串项目都在我的测试应用程序的 ComboBox 项目中。如何对上述方法进行单元测试,因为它返回 void?测试 TextRenderer.Drawtext 的另一种方法是什么?是否有任何替代方法来测试用于绘制 ComboBox 文本的 OnDrawItem 方法。

[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;
}

最佳答案

这是一个BCL方法,您不应该验证 BCL 方法的行为。

在 UT 中有一个假设; BCL 的方法和类可以正常工作。如果您验证 BCL 的方法,那么您将必须验证 intbyteToString() 等的行为...(因为你不能相信你的基础设施)

最重要的是你不应该验证 BCL 类的行为(Microsoft 已经为你完成了...)。实际上,您应该假设该方法工作正常(而不是验证它),然后验证您使用的方法是否具有正确的参数。

为了帮助我的开发人员,我创建了一个流程图来演示当他们遇到这样的问题时如何处理:(在我们的研发中我们发现它非常有用。我们喜欢它影响我们研发的方式......)

enter image description here

在您的情况下,预期的行为似乎是可见的,因此您可以通过 UI 验证它作为验收/集成/组件测试的一部分...

如果您仍想将其作为 UT 进行验证,而您的测试框架不允许您验证(Rhino MocksMoq 等)此方法,您应该包装该方法或使用其他工具测试该方法,例如 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....
}

关于c# - 如何在 C# 中对 Textrenderer.DrawText 方法进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31809530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com