如何指示NUnit从特定目录加载程序集的dll.config文件?

Ste*_*idi 13 .net nunit unit-testing configurationmanager app-config

如果程序集包含app.config文件,ConfigurationManager只要它与通过NUnit-Gui执行的NUnit项目位于同一目录中,就会加载它.为了说明考虑以下文件夹结构.

+ TestFolder
    testProject.nunit
  + AssemblyAFolder
      assemblyA.dll
      assemblyA.dll.config
  + AssemblyBFolder
      assemblyB.dll
      assemblyB.dll.config
Run Code Online (Sandbox Code Playgroud)

两者AssemblyAAssemblyB锻炼代码调用ConfigurationManager.如果我在NUnit-Gui中独立运行这些测试程序集,ConfigurationManager将正确解析本地配置文件.

然而,如果我加载testProject.nunit到NUnit的桂(其包含两者的引用AssemblyAAssemblyB),ConfigurationManager查找在配置文件TestFolder而不管哪个组件当前正在执行.

有没有办法指示NUnit将应用程序配置重新加载到当前程序集目录中的应用程序配置?

以下是内容testProject.nunit:

<NUnitProject>
  <Settings activeconfig="Debug" />
  <Config name="Debug" binpathtype="Auto">
    <assembly path="AssemblyAFolder\assemblyA.dll" />
    <assembly path="AssemblyBFolder\assemblyB.dll" />
  </Config>
</NUnitProject>
Run Code Online (Sandbox Code Playgroud)

小智 5

Nunit无法在我们的项目中找到App.config文件的路径.所以我们需要手动告诉Nunit App.config文件放在我们项目中的位置(显然在根文件夹中).

在我的例子中,项目结构如下

     +ProjectWEBApp//web pages
       +Modules
         +aspx pages
       +web.Config

    +projectBusinesslogic //business logic .cs files
       +Modules
         +.cs

      +ProjectTestName// a seperate Nunit test cases project
        +Modules
      +App.Config
Run Code Online (Sandbox Code Playgroud)

ProjectWebApp使用包含业务逻辑的projectBusinesslogic的引用.+ ProjectTestName使用projectBusinesslogic的引用来对业务逻辑执行测试.问题从这里开始,Nunit测试项目需要自己的app.config文件.它不会像projectBusinesslogic一样使用web.config文件,所以当你运行Nunit时它会提示错误

-Null参考异常.......对象瞬间未设置为...........

解决方案 - 运行Nunit GUI时

  1. 项目 - >编辑一个新的弹出窗口将打开
  2. 属性 - >常规 - >配置文件名 - >添加您的app.config文件名
  3. 文件 - >保存并关闭弹出窗口
  4. 关于Nunit Gui-File-> Reload Project

这是解决问题的简单方法


小智 2

NUnit 博客解释了为什么配置文件会这样加载。基本上他们所说的是 NUnit 让框架处理配置文件,但不进行任何管理。

您还可以使用testProject.config在您的案例中加载的文件来引用每个程序集的配置文件。使用 appSettings 文件属性添加密钥。

最后一种替代方法是使用configSource元素属性来使用程序集配置文件之一中的部分。

希望这可以帮助。