Модульный тест C # с атрибутом TestCase () не очищает базу данных / кэш? - PullRequest
0 голосов
/ 03 декабря 2018

Странная вещь, надеюсь, вы можете помочь.

        [TestFixture]
        public class TestClass
        {

            [TestCase(Size.Big, Color.Blue)]
            [TestCase(Size.Big, Color.Red)]
            [TestCase(Size.Small, Color.Blue)]
            [TestCase(Size.Small, Color.Red)]
            public void TestChunkAndRun(Size a, Color b)
            {
                using (new TransactionScope())
                {
                     try
                     {
                         //Data generation + test
                     }
                     finally
                     {
                         //manually rollbacking, disposing objects
                     }

                }
          }

С этим кодом я выполняю модульное тестирование 4 раза с различными параметрами.Модульный тест генерирует некоторые данные для самого теста.В базе данных «Размер» является частью уникального индекса, поэтому он должен быть уникальным.

Проблема в том, что (независимо от того, в каком порядке выполняются тесты) 3-й и 4-й тестовые случаи ВСЕГДА терпят неудачу из-запродублировать строку в базе данных.

Если я выполню тесты один за другим, они пройдут отдельно.Только когда я выполняю их как одну группу (независимо от того, в каком порядке) последние 2 терпят неудачу.Даже когда я вручную откат транзакции.Странная часть в том, что таблицы перед каждым тестом действительно пусты.Каким-то образом данные хранятся между TestCases, так что я получаю Дублирующую ошибку

Есть идеи о том, что происходит?

Дополнительный вопрос : в чем разница между выбором нескольких тестов инажав «выполнить все» и запустить тесты один за другим

1 Ответ

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

Этот пост помог мне с моей проблемой.

Было несколько полей только для чтения, которые были инициализированы вне методов.Переместив инициализацию в метод [TestInitialize] / [SetUp], он работал как чудо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...