Как проверить значение строки в классе объекта - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь выполнить модульный тест для класса объектов, который содержит значения в нем, с помощью get / sets.

Я понимаю, как вы будете проверять вычисление числа.

Но как это сделать?вы тестируете get / sets там, где нет методов для тестирования, таких как x + y?

Это класс, который мне нужно проверить:

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 голосов
/ 07 декабря 2018

Вы тратите время на то, чтобы заново изобрести колесо.

Замените свои свойства на автоматически внедряемые свойства , и вдруг вы не нужны модульные тесты для ваших геттеров и сеттеров, потому что компилятор создает весь код геттера / сеттера и гарантирует его правильность:

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

(поскольку вы упомянули, что это «игрушечный пример» предназначенчтобы начать работу с модульными тестами: Да, предложенный вами тест подходит.)

0 голосов
/ 07 декабря 2018

За исключением семантики синтаксиса, если только в коде не было действительной ошибки, как вы уже упоминали, это игрушечный пример , или опечатка со значениями, переданными в тест, который вызывает ошибку капризона,предоставленный тест должен пройти как написано

В большинстве случаев структурирование потока тестов может помочь избежать простых ошибок при организации и проведении тестов

[TestClass]
public class TrainUnitTest
{
    [TestMethod]
    public void Should_Get_TrainID() {
        //Arrange
        string expected = "1S45";
        Train subject = new Train();
        subject.TrainID = expected;

        //Act
        string actual = subject.TrainID;

        //Assert
        Assert.AreEqual(expected, actual);
    }
}

Вероятность того, что описанное выше не выполнено, теперь сужает проблемуиспытуемый объект ошибается.

Ссылка Основы модульного тестирования

0 голосов
/ 07 декабря 2018

Вы должны проверить поведение и изменения состояния, вызванные поведением.Ваш класс не имеет поведения и не меняет состояния по сравнению с поведением.Тестировать нечего.

Допустимый тест - это когда ваш класс имеет конструктор, который устанавливает поля поддержки, а затем утверждает, что свойства предоставляют значения из полей поддержки.

Aнеудачные тесты затем укажут на ошибку в вашем конструкторе.

Таким образом, предполагая, что ваш класс имеет конструктор наподобие (упрощенный только для демонстрационных целей)

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...