Утверждение теста MSUnit НЕПРАВИЛЬНО. Я знаю почему, но я не могу придумать, как это исправить. Помогите! Что я могу сделать, чтобы получить мое утверждение, что 3 - это количество пользователей? - PullRequest
0 голосов
/ 02 мая 2020

Я новичок в модульном тестировании и мне нужна помощь. Этот пример только для изучения, я не подсчитываю количество пользователей в переменной stati c, когда я могу просто использовать свойство count в структуре данных List. Помогите разобраться, как получить мое первоначальное утверждение, что есть 3 пользователя. Вот код:

Класс пользователя

namespace TestStatic
{
    public class User
    {
        public string Name { get; set; }
        public int Dollars { get; set; }
        public static int Num_users { get; set; }

        public User(string name)
        {
            this.Name = name;
            Num_users++;
        }


        public int CalculateInterest(int interestRate)
        {
            return Dollars * interestRate;
        }
    }
}

Тест с использованием MSTest

namespace TestStaticUnitTest
{
    [TestClass]
    public class CalcInterest
    {
        [TestMethod]
        public void UserMoney()
        {
            // arrange
            User bob = new User("Bob");
            bob.Dollars = 24;

            // act
            int result = bob.CalculateInterest(6);

            // assert
            Assert.AreEqual(144, result);

            //cleanup?
        }

        [TestMethod]
        public void UserCount()
        {
            // arrange
            List<User> users = new List<User>(){ new User("Joe"), new User("Bob"), new User("Greg") };

            // act
            int userCount = User.Num_users;

            // assert
            Assert.AreEqual(3, userCount);
        }
    }
}

Результат в тесте UserCount не выполнен, поскольку существует четвертый пользователь. Пользователь из теста UserMoney все еще находится в памяти. Что я должен сделать, чтобы получить трех пользователей? Должен ли я собирать мусор первым Бобом?

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

1 Ответ

0 голосов
/ 02 мая 2020

Очевидным решением будет удалить счетчик static. Как видите, при вводе второго метода модульного тестирования UserCount() значение этого счетчика все еще равно 1 от выполнения первого метода модульного теста UserMoney() до этого.

Если вы хотите сохранить Счетчик (в целях обучения, чтобы увидеть, что происходит), вы можете использовать методы очистки, которые будут «сбрасывать» среду перед all или каждым методом модульного тестирования. В этом случае вы хотите сбросить счетчик на 0 для каждого выполнения метода модульного теста. Это можно сделать, написав метод с атрибутом [TestInitialize]:

[TestInitialize]
public void _Initialize() {
    User.Num_users = 0;
}

Таким образом, каждый модульный тест выполняется с «чистым» состоянием, в котором счетчик будет сброшен на 0 до фактической единицы. Выполнен метод теста.

Возможно, вы захотите взглянуть на Почему TestInitialize запускается для каждого теста в моих модульных тестах Visual Studio? , чтобы увидеть, как работают эти атрибуты.

...