当前位置:  开发笔记 > 编程语言 > 正文

.Net中的UnitTesting属性?

如何解决《.Net中的UnitTesting属性?》经验,为你挑选了3个好方法。

我正在开发一个我想在开源中发布的lib.我已经开始为代码编写测试了,我想知道我是如何测试.Net对象中的属性的.可以说我有以下内容:


public class Person{
    #region variables
    private string _name = String.Empty;
    private string _surname = String.Empty;
    #region properties
    public string Name{
        get{
             return _name;
        }
    }
    public string Surname{
        get{
            return _surname;
        }
        set{
            _surname = value;
        }
    }
}

我有两个与代码相关的问题:

    我如何单元测试一个只有一个getter的属性(在示例中像Name)

    如何使用setter和getter对属性进行单元测试(如示例中的Surname)

我想测试那么简单的属性,因为我已经发现其他代码中的错误是Itellinsense做错了自动完成而属性没有返回正确的变量.

更新:

我不是说简单的属性就像示例中那样,它们确实有一些逻辑,并且很难调试.编写使用setter来测试getter的测试,反之亦然,因为如果出现故障,我不知道应该指责哪种方法.我正在使用属性,因为它们被添加为公共变量,后来需要添加更多逻辑.



1> Bealer..:

唐痴迷于为吸气者和制定者写傻考试.

另一个测试可能会设置Name,然后获取该属性,以便您获得getter的代码覆盖率.

你应该测试任何面向公众的东西,包括属性.如果您不测试属性,则可能会冒一些人在其中添加一些逻辑,从而破坏功能的风险.

此外,您不应该依赖它在其他测试中进行测试.这会使您的测试变得脆弱,并且使得更难以确定问题所在,因为测试将测试不止一件事.



2> Arjan Einbu..:

我如何单元测试一个只有一个getter的属性(在示例中像Name)

如果你有一个二传手,真的没有测试那么不同.你只需要找到另一种确定输出的方法.可以在ctor中,也可以是对象上其他setter/operations的结果.

[Test]
public void NamePropTest()
{
    Person p = new Person();

    //Some code here that will set up the Person object
    //  so that you know what the name will be

    Assert.AreEqual("some known value...", p.Name);
}

如果我们有Name和SurName的setter,但只有FullName的getter,那么测试可能如下所示:

[Test]
public void NamePropTest()
{
    Person p = new Person();

    p.Name = "Sean";
    p.Surname = "Penn";

    Assert.AreEqual("Sean Penn", p.FullName);
}



3> Arjan Einbu..:

你应该测试属性.还有自动属性!

单元测试是关于确保程序的更改,不要破坏程序.

您可能最终会在某个时间更改属性实现,并且您希望确保程序仍然按预期工作.你用你的测试做到了.

即使您使用自动属性(作为字段/成员变量的替代),制作属性的原因也是为了以后您想要更改其实现.然后你会希望测试在那里.

编辑:(回应shahkalpesh的评论......)

如果要更改实现,测试可能还需要更改.所以,我不知道为什么有人应该测试简单的get/set?

从这个课开始:

public class TimeOfDay
{
    public int Hour{get; private set;}
    public int Minute{get; private set;}

    public TimeOfDay(int hour, int minute)
    {
        Hour = hour;
        Minute = minute;
    }
}

更改实施时,测试仍然有效!

public class TimeOfDay
{
    public int _minutesSinceMidnight = 0;

    public int Hour
    {
        get { return _minutesSinceMidnight / 60; }
        set { _minutesSinceMidnight = value * 60 + Minutes; }
    }

    public int Minute
    {
        get { return _minutesSinceMidnight % 60; }
        set { _minutesSinceMidnight = Hour * 60 + value; }
    }

    public TimeOfDay(int hour, int minute)
    {
        Hour = hour;
        Minute = minute;
    }
}

投入一些日期和时间算术函数或其他东西,我希望测试表明一切仍然有效......

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有