NUnit和app.config的问题

时间:2010-03-09 13:13:38

标签: visual-studio nunit app-config configurationmanager

当我在连接到DB时运行简单测试时,我在NUnit中收到错误:

[Test]
public void TestConn()
{
    string  connectionString = ConfigurationManager.ConnectionStrings["FertigungRead"].ConnectionString;
    SqlConnection connection = new SqlConnection(connectionString);
    connection.Open();
    Assert.AreEqual(ConnectionState.Open, connection.State);
    connection.Close();
 }
  

System.NullReferenceException:未将对象引用设置为对象的实例。

在线:

connectionString = ConfigurationManager.ConnectionStrings["FertigungRead"].ConnectionString;

我可以在测试中使用ConfigurationManager吗?

9 个答案:

答案 0 :(得分:26)

是的,你可以。您需要确保测试中引用的任何配置实际存在于测试项目的app.config中。

换句话说,您的测试所在的项目没有在其"FertigungRead"中定义的连接字符串app.config

执行此操作的一种方法是将测试中的app.config系统添加到测试项目as a link,这样两个项目都会发生任何更改。

答案 1 :(得分:5)

  1. 转到NUnit / Project / Edit ...
  2. 在“配置属性”面板中,转到“配置文件名”
  3. yourAssemblyName .dll.config
  4. 放在那里

    注意:如果不起作用,请尝试添加路径,例如bin \ Debug \ yourAssemblyName .dll.config

    您的测试项目文件 yourAssemblyName .nunit将会更新。

    是的,请确保您的测试项目中的App.config与您在测试中访问的内容相匹配,即

    [Test]
    public void TestConn()
    {
       var sss = ConfigurationManager.AppSettings["TestKey"];
    }
    

    的App.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="TestKey" value="testKeyValue"/>
      </appSettings>
    </configuration>
    

答案 2 :(得分:4)

我想补充一点。在nunit的文档中有一个注释,根据使用场景,应该完成配置文件的命名和放置。我被困在这个问题上一段时间了。

文档说:

如果正在加载单个程序集,则会为配置文件指定具有config扩展名的程序集文件的名称。例如,用于运行nunit.tests.dll的配置文件必须命名为nunit.tests.dll.config,与dll位于同一目录。

如果正在加载NUnit项目,配置文件将使用项目文件的名称,扩展名已更改为config。例如,项目AllTests.nunit将需要名为AllTests的配置文件.config,与AllTests.nunit位于同一目录中。加载Visual Studio项目或解决方案时遵循相同的规则。

http://www.nunit.org/index.php?p=configFiles&r=2.2.10

答案 3 :(得分:3)

只要您的测试项目配置与主项目相同,您的单元测试仍然有效。

我建议在测试项目中使用预构建事件将应用程序的配置文件复制到测试项目中。这节省了必须维护两组配置。

  

copy $(SolutionDir)path-to-main-project \ Web.config $(ProjectDir)App.config

答案 4 :(得分:1)

为什么需要单元测试来查看SqlConnection是否有效?你应该测试你的代码,而不是微软的代码。在单元测试中,我没有看到检查连接字符串是否正确的重点。单元测试使用的配置与生产代码使用的配置不同。

通常,如果您需要一些配置数据进行单元测试,请在测试项目中创建一个app.config文件。使用适合您的测试环境的值填充appSettings和connectionStrings元素等。但是,不要费心测试ConfigurationManager或SqlConnection是否正常工作。您只需要创建必须维护的代码,但这实际上并不验证您正在编写的任何生产代码。

答案 5 :(得分:1)

查看我的回答nunit and configs 您需要告诉nunit配置文件的名称是什么。它默认查找namespace.config接缝

答案 6 :(得分:1)

男人看看:http://nunit.net/blogs/?p=9

正如他建议我在项目根目录中放置一个MyProjectTests.dll.config,一切正常。

我的配置文件的一个例子是:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
     <add key="TestKey" value="Ok!"/>
</appSettings>
</configuration>

我正在使用简单的:ConfigurationManager.AppSettings["TestKey"];

答案 7 :(得分:0)

在运行测试的项目中使用配置文件时,必须遵循特定的命名约定。

配置文件名应该是具有config扩展名的程序集文件的名称。例如,用于运行MyUnitTest.tests.dll的配置文件必须命名为MyUnitTest.tests.dll.config,并且它应与MyUnitTest.nunit

位于同一目录中

我们也可以在下面的预建中配置

copy $(SolutionDir)path-to-main-project\Web.config $(ProjectDir)App.config 

答案 8 :(得分:0)

我处于相同的情况,我试图将app.config添加到NUnit项目中,但该项目无法识别它。 对我来说,棘手的解决方法是创建一个包含应用程序配置的类库,然后上交我的测试项目。归根结底,所有NUnit及其适配器都是NuGet软件包,可以将它们添加到类库中以进行测试,并且Visual Studio和Resharper可以很好地运行测试。

enter image description here

enter image description here

enter image description here

enter image description here

最后调试了我的测试,并从我的测试项目中的});文件中接收了值:

enter image description here