为什么我不能从NUnit项目中测试此DAO项目方法? System.IO.FileNotFoundException无法加载文件或程序集'System.Data.SqlClient

时间:2018-12-28 14:54:21

标签: c# .net nunit sharepoint-2013 ado

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造成一些问题。

0 个答案:

没有答案