I am pretty new in C# and .NET (I came from Java EE ecosystem) and I am finding some difficulties working on a SharePoint 2013 project trying to add unit test (unsing NUnit) that have to test the behavior of a DAO project defined into my solution.
I try to explain you my situation in details. Into my solution I have several projects. One of these projects (named somethinbg like MyProjectSqlEngine) contain the DAOs classes performing the queries on my dtabase. Another project is a NUnit test project where I am trying to define some tests to test the DAO methods.
So, into my DAO project I have this class named 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;
}
}
}
It contains the method named GetListaIndirizziSiti(DBConnection dbConf) that take a DBConnection object and use it to obtain the connection (the SqlConnection object) and then perform a SQL query. My query is defined as a static string properties into the PROT_INDIRIZZI_PROTOCOLLI class (but this is not important):
string query = PROT_INDIRIZZI_PROTOCOLLI.SELECT_LISTA_INDIRIZZI_SITI;
Ok, I can call the previous GetListaIndirizziSiti(DBConnection dbConf) method from the code of a main project that have the MyProjectSqlEngine as reference. In a class of this main project I have something like this:
public override void Execute(Guid targetInstanceId)
{
DBConnection dbConfig = new DBConnection();
dbConfig.Tenant = "ABC";
List<string> urlList = IndirizziProtocolliSQL.GetListaIndirizziSiti(dbConfig);
}
It works fine, the query performed by this GetListaIndirizziSiti() is correctly performed and I obtain the expected values into the urlList variable.
The problem is that I want to do integration tests testing all my DAO methods using NUnit (in this way I can develop and test all my DAO methods before implement the service application logic).
So I created a new NUnit test project, into my solution containing this class with a minimalistic test method to test the previos DAO method:
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");
}
}
}
The problem is that performing this test method when arrive on this line (I see it debugging it):
List<string> urlList = IndirizziProtocolliSQL.GetListaIndirizziSiti(dbConfig);
it is thrown the following exception:
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.
Why? What am I missing? What exactly means that the System.Data.SqlClient assembly can't be load. How can I try to fix this issue?
NOTE: I have put the main project as reference of this NUnit test project so in the test code. This main project has as my DAO project as dependency. I don't know if this dependencies chain can create some problem to NUnit.