在 C#和 .NET (我来自Java EE生态系统)中,我是一个新手,在使用 SharePoint 2013 时遇到一些困难。 strong>项目尝试添加必须测试定义到我的解决方案中的DAO项目行为的单元测试(取消使用 NUnit )。
我尝试向您详细说明我的情况。在我的解决方案中,我有几个项目。 其中一个项目(名为 MyProjectSqlEngine 之类的项目)包含在我的dtabase上执行查询的 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;
好吧,我可以从以 MyProjectSqlEngine 为参考的主项目代码中调用以前的 GetListaIndirizziSiti(DBConnection dbConf)方法。在这个主要项目的课程中,我有这样的东西:
public override void Execute(Guid targetInstanceId)
{
DBConnection dbConfig = new DBConnection();
dbConfig.Tenant = "ABC";
List<string> urlList = IndirizziProtocolliSQL.GetListaIndirizziSiti(dbConfig);
}
它工作正常,正确执行了此 GetListaIndirizziSiti()执行的查询,并且我在 urlList 变量中获得了预期的值。
问题是我想使用 NUnit 进行集成测试以测试所有DAO方法(通过这种方式,我可以在实现服务应用程序逻辑之前开发和测试所有DAO方法)。
因此,我在包含此类的解决方案中创建了一个新的 NUnit测试项目,该项目带有用于测试previos 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造成一些问题。