如何在.net中使用C#对默认构造函数类进行单元测试?

时间:2013-11-26 07:21:54

标签: c# unit-testing constructor

我在Visual Studio 2012中有一个Windows类库项目,我正在尝试测试默认构造函数。

我的构造函数是:

  public Form()
    {
        Items = new List<IFormItem>();
        Items.Add(new FormItem());
        Items[0].Type = ItemTypes.TextBox;
        Items[0].Text = "User ID";
        Items[0].X = 100;
        Items[0].Y = 100;
        Items[0].Height = 30;
        Items[0].Width = 100;
        Items.Add(new FormItem());
        Items[1].Type = ItemTypes.Button;
        Items[1].Text = "Log In";
        Items[1].X = 130;
        Items[1].Y = 170;
        Items[1].Height = 30;
        Items[1].Width = 70;
    } 

我将如何测试?

    [TestMethod]
    public void GetForm()
    {
        Form frm = new Form();

        //what to write here
    }

我只是想测试是否调用构造函数。

3 个答案:

答案 0 :(得分:3)

试试这个:

[TestMethod]
public void GetForm()
{
    Form frm = new Form(); // the constructor is called here, this is your ACT

    var expectedNumberOfItems = 2;
    var expectedType = ItemTypes.Button;

    Assert.AreEqual(expectedNumberOfItems, frm.Items.Count, "frm.Items.Count");

    Assert.AreEqual(expectedType, frm.Items[0].Type, "frm.Items[0].Type");
    // etc...
}

答案 1 :(得分:3)

你可能会测试一些事情:

  1. Items.Count是2;
  2. 并且这些值是您所期望的。
  3. 所以,也许是这样的:

    [TestMethod]
    public void GetForm()
    {
        Form frm = new Form();
    
        Assert.AreEqual(2, frm.Items.Count);
        Assert.AreEqual("User ID", frm.Items[0].Text);
        ...
    }
    

    您想要测试您可能设置的所有属性,上面的代码只是一个大纲。

答案 2 :(得分:2)

我会说你可以很好地测试构造函数,但由于代码中没有业务逻辑,所以没有任何意义。如果您只考虑代码覆盖率,则可以声明Items集合包含两个项目。至少你会确保没有人篡改你的构造函数:)

Assert.AreEqual(2,frm.Items.Count);