@BernadetteWolowitz
C# developer

Как протестировать большой объект не создавая его в каждом тестовом методе?

Необходимо написать тесты для методов объекта. Сам объект содержит в себе очень много данных и создается из большого файла довольно долго.
Написала вот такой вариант:

[TestClass]
    public class TestClass
    {
        private GodObject godObject;

        public TestClass()
        {
            godObject = _CreateGodObjectFromFile();
        }

        private GodObject _CreateGodObjectFromFile()
        {
        ...
        }

        [TestMethod]
        public void Method_1()
        {
            //Arrange

            //Act
            godObject.Method_1();

                //Assert
            ...
        }

        [TestMethod]
        public void Method_2()
        {
            //Arrange

            //Act
            godObject.Method_2();

                //Assert
            ...
        }

    }


godObject все равно создается при выполнении каждого тестового метода (очень долго). Я хочу, чтобы godObject был создан один раз, а затем использовать его в тестовых методах. Это возможно?
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
@sputnic
Android Developer
а Moq пробовали?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++
Вот две из основных характеристик модульного теста "Скорость выполнение", вторая "Простота написания". Если эти два качества сложность достич, то Вы пишите тест другого типа, не модульный! Возможно интеграционный.

С Файлом в тестах имеет смысл работать только и только тогда, когда Вы тестируете класс по работе с файлом. К примеру тест для std::fstream из C++ стандартной библиотеки или FileInputStream из java библиотеки. НО! За качество стандартных библиотек разработчики не несут ответственности.

Другими словами Вам надо избавиться от факта использования файла в ваших тестах! Возможно Вашему классу нужно работать с интерфейсом стрима и свести работу с файлом через файловый стрим, в production коде и через Memory стрим, если это тестовый.

Чтобы избежать создания объекта класса в каждом тесте, надеюсь Вы хотите убрать дублирующие строчки, то Вы можете вынести создание объекта в setUp() подобный метод или вынести создание в Factory-класс и тогда использование фабрики будет занимать одну строчку в тесте, что значительно лучше!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы