Чтение / загрузка нескольких XML в одном тесте, инициализация с помощью NDbUnit

#unit-testing #vs-unit-testing-framework #ndbunit

#модульное тестирование #vs-unit-testing-framework #ndbunit

Вопрос:

Я пытаюсь использовать NDbUnit. Я создал отдельный XSD для каждой таблицы вместо одного большого XSD для всей базы данных.

Мои тесты выполняются нормально, когда я использую только один XSD и выполняю однократное чтение xml. Однако для пертикулярного теста мне нужны данные в двух или трех разных (но связанных) таблицах. Если я пытаюсь прочитать более одного xsd и xml, то возникает исключение.

Вот мой код

         [ClassInitialize()]
        public static void MyClassInitialize(TestContext testContext)
        {
            IDbConnection connection = DbConnection.GetCurrentDbConnection();
            _mySqlDatabase = new NDbUnit.Core.SqlClient.SqlDbUnitTest(connection);
            _mySqlDatabase.ReadXmlSchema(@"DataCompanyMaster.xsd");  
            _mySqlDatabase.ReadXml(@"DataCompanyMaster.xml");
            _mySqlDatabase.ReadXmlSchema(@"DataLicense.xsd");
            _mySqlDatabase.ReadXml(@"DataLicense.xml");
            _mySqlDatabase.ReadXmlSchema(@"DataLicenseDetails.xsd");
            _mySqlDatabase.ReadXml(@"DataLicenseDetails.xml");
            _mySqlDatabase.ReadXmlSchema(@"RelatedLicense.xsd");
            _mySqlDatabase.ReadXml(@"DataRelatedLicense.xml");    
        }
  

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

Метод инициализации класса ESMS.UnitTest.CompanyManagerTest.MyClassInitialize вызвал исключение. Система.Исключение ArgumentException: System.Исключение ArgumentException: Элемент уже добавлен. Ключ в словаре: ‘EnableTableAdapterManager’ Добавляется ключ: ‘EnableTableAdapterManager’.

Я не уверен, что это правильный способ чтения нескольких XML, XSD с помощью NDbUnit. Я погуглил и переполнил (т. Е. искал stack overflow), но не смог получить никакого разумного направления. Кто-нибудь может объяснить, что происходит не так и как исправить?

Ответ №1:

Предполагается, что NDbUnit используется не так. Нет поддержки чтения нескольких XSD или XML-файлов в одну тестовую область. NDbUnit использует информацию в одном XSD для анализа связей (FKS и т.д.) Между вашими таблицами, Чтобы иметь возможность правильно манипулировать таблицами во время своих операций CRUD, И поэтому требуется, чтобы единый XSD описывал всю область таблиц, которыми вы хотите, чтобы NDbUnit манипулировал во время тестового запуска.

Может быть возможно загрузить несколько XML-файлов (содержащих ваши тестовые данные), но это не тестируемый / поддерживаемый сценарий. Мне было бы интересно понять, какой у вас сценарий использования, который исключал бы наличие только одного XML-файла с необходимыми тестовыми данными.

Но это определенно тот случай, когда одновременно может быть загружен только один XSD-файл (содержащий схему одной или нескольких таблиц и их взаимосвязи и т.д.).

Надеюсь, это немного прояснит ситуацию.

Ответ №2:

Сболен показал мне способ.

Это правда, что на данный момент загрузка нескольких XSD-файлов не поддерживается.

Однако, к счастью, возможна загрузка нескольких XML-файлов в один XSD.

Итак, что я сделал, это создал единый XSD-файл и перенес в него все связанные таблицы. Затем используется AppendXml sytanx, доступный рядом с ReadXml. Таким образом, я мог загружать требуемые тестовые данные в несколько таблиц, и мои тесты начали проходить.

По этой ссылке будет рассказано больше о AppendXml http://code.google.com/p/ndbunit/issues/detail?id=27

Комментарии:

1. Потрясающе! Я просто хотел бы отметить, что есть альтернатива, а именно, создание нового INDbUnit каждый раз, когда вам нужно прочитать новый XSD.