34

当我在连接到 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 吗?

4

9 回答 9

26

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

换句话说,您的测试所在的项目没有"FertigungRead"在其app.config.

一种方法是将app.config被测系统的作为链接添加到测试项目中,这样任何更改都会在两个项目上发生。

于 2010-03-09T13:16:01.667 回答
6
  1. 转到 NUnit/项目/编辑...
  2. 在配置属性面板中,转到配置文件名
  3. 把你的AssemblyName .dll.config放在那里

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

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

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

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

应用程序配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="TestKey" value="testKeyValue"/>
  </appSettings>
</configuration>
于 2014-05-01T14:42:29.653 回答
5

我想补充一点。在 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

于 2013-10-28T20:25:07.823 回答
3

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

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

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

于 2010-03-09T13:18:32.300 回答
1

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

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

于 2010-03-09T13:25:54.387 回答
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"];

于 2011-10-13T21:10:12.343 回答
1

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

于 2011-04-28T16:34:30.240 回答
1

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

配置文件名应该是带有配置扩展名的程序集文件的名称。例如,用于运行的配置文件MyUnitTest.tests.dll必须命名MyUnitTest.tests.dll.config,并且与运行的配置文件在同一目录下MyUnitTest.nunit

我们也可以在预构建中配置它,如下所示

copy $(SolutionDir)path-to-main-project\Web.config $(ProjectDir)App.config 
于 2017-03-07T04:55:11.703 回答
0

我遇到了同样的情况,我尝试将 app.config 添加到 NUnit 项目中,但该项目无法识别它。对我来说,棘手的解决方法是创建一个包含应用程序配置的类库并将其提交到我的测试项目中。归根结底,所有 NUnit 及其适配器都是 NuGet 包,可以将这些包添加到类库中进行测试,并且测试可以由 Visual Studio 和 Resharper 完美运行。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

App.config最后调试了我的测试并从我的测试项目中的文件中接收了值:

在此处输入图像描述

于 2019-12-02T17:30:52.277 回答