如何在对象类中对字符串值进行单元测试

时间:2018-12-07 15:06:04

标签: c# unit-testing

我正在尝试对通过get / sets保存值的对象类进行单元测试。

我了解您将如何测试数字计算。

但是在没有像x + y这样的测试方法的情况下,如何测试get / set?

这是我需要测试的课程:

public class Train
    {
        //Variables to hold each Trains details. Using different data types for specific entrys when necessary.
        private string _trainID;
        private string _departure;
        private string _destination;
        private string _type;
        private string _interStop;
        private TimeSpan _departureTime;
        private string _departureDay;
        private bool _sleeperBerth;
        private bool _firstClass;

        //Get/Set for setting Train ID value.
        public string TrainID
        {
            get
            {
                return _trainID;
            }
            set
            {
                _trainID = value;
            }
        }

        //Get/Set for setting departure value.
        public string Departure
        {
            get
            {
                return _departure;
            }
            set
            {
                _departure = value;
            }
        }

        //Get/Set for setting destination value.
        public string Destination
        {
            get
            {
                return _destination;
            }
            set
            {
                _destination = value;
            }
        }

        //Get/Set for setting type value.
        public string Type
        {
            get
            {
                return _type;
            }
            set
            {
                _type = value;
            }
        }

        //Get/Set for setting Intermediate Stop value.
        public string IntermediateStop
        {
            get
            {
                return _interStop;
            }
            set
            {
                _interStop = value;
            }
        }

        //Get/Set for setting Departure Time value.
        public TimeSpan DepartureTime
        {
            get
            {
                return _departureTime;
            }
            set
            {
                _departureTime = value;
            }
        }

        //Get/Set for setting Departure Day value.
        public string DepartureDay
        {
            get
            {
                return _departureDay;
            }
            set
            {
                _departureDay = value;
            }
        }

        //Get/Set for setting  Sleeper Berth value.
        public bool SleeperBerth
        {
            get
            {
                return _sleeperBerth;
            }
            set
            {
                _sleeperBerth = value;
            }
        }

        //Get/Set for setting First Class value.
        public bool FirstClass
        {
            get
            {
                return _firstClass;
            }
            set
            {
                _firstClass = value;
            }
        }
    }

我也完成了一些我认为是正确的单元测试,但是只是失败了。有人可以让我了解我该怎么做吗?

这是我所做的测试(真的那么简单吗?)

namespace TrainTest
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestTrainID()
        {
        Train train = new Train();

        string id = "1S45";

        train.TrainID = "1S45";

        Assert.AreEqual(id, train.TrainID);
        }
    }
}

3 个答案:

答案 0 :(得分:0)

您正在浪费时间重新发明轮子。

auto-implemented properties替换您的属性,突然之间,您不需要 进行getter和setter的单元测试,因为编译器会创建所有getter / setter代码并确保其正确:

public class Train
{
    public string TrainID { get; set; }
    public string Departure { get; set; }
    ... etc. ...
}

(由于您提到这是一个“玩具示例”,旨在使您开始进行单元测试:是的,您建议的测试很好。)

答案 1 :(得分:0)

除了语法语义外,除非未显示代码中的实际错误,如您提到的那样,这是一个玩具示例,或者是带有传递到测试的值的错字,从而导致电容器错误。 ,提供的测试应按书面要求通过

大多数时候,结构化测试流程可以帮助避免在安排和练习测试时犯下的简单错误

malloc

上述失败的可能性现在将问题缩小到被测对象有过错的地方。

引用Unit test basics

答案 2 :(得分:-1)

您应该测试行为以及行为引起的状态更改。您的班级没有行为,行为也不会改变状态。没有要测试的东西。

一个有效的测试是当您的类具有一个构造函数来设置后备字段,然后断言属性公开了后备字段的值时。

如果测试失败,则会指出构造函数中的错误。

因此,假设您的类具有类似的构造函数(仅出于演示目的而进行了简化)

public class Train {        
    private string _trainID;

    public Train(string id) {
        _trainID = id;
    }

    //Get/Set for setting Train ID value.
    public string TrainID {
        get {
            return _trainID;
        }
        set {
            _trainID = value;
        }
    }
}

请参见下面的测试示例,可以用来确认构造函数的行为符合预期。

public class TrainUnitTest
{
    [Fact]
    public void Should_Get_TrainID()
    {
        //arrange
        var expected = "1S45";
        var subject  = new Train("1S45");

        //act
        string actual = subject.TrainID;

        //assert
        Assert.Equal(expected, actual);
    }
}