void方法的单元测试C#

时间:2017-04-22 04:40:19

标签: c# unit-testing

我正在尝试用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;
            }
        }
    }

2 个答案:

答案 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对逻辑进行单元测试...也许创建一个空组合框,将每个禁用的组合框添加到该集合中,然后让该方法返回已禁用组合框的集合。然后可能断言他们都被禁用了。