Почему я не могу проверить этот метод проекта DAO из проекта NUnit?System.IO.FileNotFoundException Не удалось загрузить файл или сборку 'System.Data.SqlClient - PullRequest
0 голосов
/ 28 декабря 2018

Я довольно новичок в C # и .NET (я из экосистемы Java EE), и я испытываю некоторые трудности при работе над проектом SharePoint 2013 пытаюсь добавить модульный тест (unsing NUnit ), который должен проверить поведение проекта DAO, определенного в моем решении.

Я пытаюсь объяснить вам мою ситуацию в деталях.В моем решении у меня есть несколько проектов.Один из этих проектов (называемый somethinbg, например MyProjectSqlEngine ) содержит классы DAOs , выполняющие запросы к моей базе данных.Другой проект - это тестовый проект NUnit , в котором я пытаюсь определить некоторые тесты для тестирования методов DAO.

Итак, в моем проекте DAO у меня есть этот класс с именем IndirizziProtocolliSQL :

namespace MyProject.Protocollo.QueryUtils
{
    public class IndirizziProtocolliSQL
    {
        /**
         * <summary>
         * Ritorna la lista dei siti
         * </summary>
         */
        public static List<string> GetListaIndirizziSiti(DBConnection dbConf)
        {
            string url = null;

            List<string> urlList = new List<string>();

            string query = PROT_INDIRIZZI_PROTOCOLLI.SELECT_LISTA_INDIRIZZI_SITI;
            using (SqlConnection con = ArxeiaConnection.getARXEIAStringConnection(dbConf.Tenant + "_PROTOCOLLO"))
            {
                using (SqlCommand cmd = new SqlCommand(query, con))
                {
                    try
                    {
                        con.Open();

                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            if (reader.HasRows)
                            {
                                while (reader.Read())
                                {
                                    url = reader.GetString(reader.GetOrdinal("Url"));
                                    urlList.Add(url);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        con.Close();
                    }
                }
            }
            return urlList;
        }

    }
}

Содержит метод с именем GetListaIndirizziSiti (DBConnection dbConf) , который принимает объект DBConnection и использует его для получения соединения (SqlConnection объект), а затем выполните запрос SQL.Мой запрос определен как свойства статической строки в классе PROT_INDIRIZZI_PROTOCOLLI (но это не важно):

string query = PROT_INDIRIZZI_PROTOCOLLI.SELECT_LISTA_INDIRIZZI_SITI;

Хорошо, я могу вызвать предыдущий GetListaIndirizziSiti (DBConnection dbConf) метод из кода основного проекта, который имеет MyProjectSqlEngine в качестве ссылки.В классе этого основного проекта у меня есть что-то вроде этого:

public override void Execute(Guid targetInstanceId)
{

    DBConnection dbConfig = new DBConnection();
    dbConfig.Tenant = "ABC";

    List<string> urlList = IndirizziProtocolliSQL.GetListaIndirizziSiti(dbConfig);
}

Он работает нормально, запрос, выполняемый этим GetListaIndirizziSiti () , правильно выполняется, и я получаю ожидаемые значения впеременная urlList .

Проблема заключается в том, что я хочу провести интеграционные тесты, проверяющие все мои методы DAO, используя NUnit (таким образом, я могу разработать и протестировать все своиМетоды DAO перед реализацией логики приложения службы).

Итак, я создал новый тестовый проект NUnit в своем решении, содержащем этот класс, с минималистичным тестовым методом для тестирования предыдущего метода DAO:

namespace Tests
{
    public class Tests
    {
        [SetUp]
        public void Setup()
        {
        }

        [Test]
        public void GetIndirizzoProtocollo_XXX_YYY_ReturnSingleValue()
        {
            DBConnection dbConfig = new DBConnection();
            dbConfig.Tenant = "ABC";

            List<string> urlList = IndirizziProtocolliSQL.GetListaIndirizziSiti(dbConfig);
            //string test = IndirizziProtocolliSQL.Test();

            Assert.Pass("OK");
        }

    }
}

Проблема в том, что при выполнении этого метода теста, когда он прибывает на эту строку (я вижу, что он отлаживает его):

List<string> urlList = IndirizziProtocolliSQL.GetListaIndirizziSiti(dbConfig);

выдается следующее исключение:

Exception thrown: 'System.IO.FileNotFoundException' in TestProject.dll
An exception of type 'System.IO.FileNotFoundException' occurred in TestProject.dll but was not handled in user code
Could not load file or assembly 'System.Data.SqlClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

Почему?Чего мне не хватает?Что именно означает, что сборка System.Data.SqlClient не может быть загружена.Как я могу попытаться решить эту проблему?

ПРИМЕЧАНИЕ. Я поместил основной проект как ссылку на этот тестовый проект NUnit, так и в тестовом коде.Этот основной проект имеет в качестве моего DAO-проекта зависимость.Я не знаю, может ли эта цепочка зависимостей создать какую-то проблему для NUnit.

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