我正在尝试用void编写方法的单元测试。但是,我找不到任何例子或明确的答案。以下是我在程序中使用的方法,我想为此编写单元测试。谁能在这方面帮助我。提前谢谢。
//method for disable all comboBoxes
private void comboDisable()
{
foreach (var j in this.Controls)
{
if (j.GetType().Equals(typeof(ComboBox)))
{
ComboBox cmb = j as ComboBox;
cmb.Enabled = false;
}
}
}
答案 0 :(得分:1)
如前所述,单元测试通常以应用程序逻辑公共方法为目标,而不是与UI相关的方法。
如果您真的坚持测试方法,则应遵循以下步骤:
1)设置阶段 - 这是初始化测试上下文的阶段。在您的情况下,初始化和打开包含组合框的表单
2)撕下阶段 - 这是一个让事情好像你的测试从未运行的阶段。例如。关闭并以您的形式处理
3)实际测试 - 获取一些组合框实例,启用它们,调用方法,检查所有复选框是否已禁用
使用NUnit framework attributes的一些(伪)代码(未经测试,只是为了让您入门):
[TestFixture]
public class YourFormTests
{
private Form frm;
[OneTimeSetUp]
public void SetUp()
{
frm = new Form();
frm.Show();
}
[OneTimeSetup]
public void TearDown()
{
frm?.Close();
frm?.Dispose();
}
[Test]
public void TestComboDisabled()
{
frm.cmbSomeName.Enabled = true;
frm.comboDisable();
Assert.IsFalse(frm.cmbSomeName.Enabled, "Combo is not disabled");
}
}
这假设您的方法是公开的,也是经过测试的组合框。从理论上讲,你可以dynamically invoke a private method,但这真的很丑,不推荐(方法重命名产生TargetInvocationException
而不是编译错误。)
这应该提供关于单元测试创建的基本想法,但你应该read the basics。
答案 1 :(得分:0)
正如一些人所提到的,你真的应该将你的业务逻辑与你的UI分开。我在这里看到的问题是你将进行单元测试?您是否想要查看某个组合框是否被禁用?如果所有组合框都被禁用了吗?
我的建议非常......值得怀疑。但是,如果您希望使用UI对逻辑进行单元测试...也许创建一个空组合框,将每个禁用的组合框添加到该集合中,然后让该方法返回已禁用组合框的集合。然后可能断言他们都被禁用了。