Я довольно новичок в 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.