【问题标题】:Trying to nunit test enterprise logging尝试对企业日志进行 nunit 测试
【发布时间】:2016-09-19 08:42:48
【问题描述】:

我正在尝试对企业日志进行 nunit 测试,以证明创建日志等。

我似乎无法让它工作-我收到一个错误,在配置源中找不到 loggin 的配置部分-我认为这与这是 wpf 并且应用程序配置不存在的事实有关当我从一个班级运行一个 nunit 测试时开始。有什么想法吗?

 namespace Nunit
{
    [TestFixture]
    public class NunitTests
    {
        string Path = @"C:\Users\dani\bin\Debug\trace.log";



        [Test]
        public void TestLogCreation()
        {}
}

【问题讨论】:

  • 您的单元测试项目中的 App.config 是否配置正确?是否有记录输出所需的所有配置?

标签: c# logging nunit enterprise-library


【解决方案1】:

当你运行 NUnit 可执行文件时,它会尝试在它自己的配置文件中查找它找不到的任何配置条目。之后,它会在 machine.config 文件中搜索配置条目。它也没有找到配置条目,因此它给出了错误。

您可以通过将配置条目放入 machine.config 文件来解决此问题。

但这不是单元测试的正确方法。您必须提供假类来读取配置条目,而不是从配置文件中读取实际的配置值。

machine.config 文件可以在下面提到的路径中找到:

32 位

%windir%\Microsoft.NET\Framework\[version]\config\machine.config

64 位

%windir%\Microsoft.NET\Framework64\[version]\config\machine.config 

编辑

public interface IConfigReader
{
    string ReadConfigEntry(string keyName);
}

public class ConfigReader : IConfigReader
{
    public string ReadConfigEntry(string keyName)
    {
        return System.Configuration.ConfigurationManager.AppSettings[keyName];
    }
}

public class FakeConfigReader : IConfigReader
{
    public string ReadConfigEntry(string keyName)
    {
        string configValue = string.Empty;

        //provide dummy implementation instead of reading actual .config file

        return configValue;
    }
}

现在创建IConfigReader 接口的实例。在实际代码中使用ConfigReader 实现来读取配置值,而单元测试使用FakeConfigReader 实现。在FakeConfigReader 中,您可以从ReadConfigEntry 方法返回任意硬编码值。

【讨论】:

  • @user3223507 我已经编辑了我的答案。请检查它是否有用。
  • 谢谢 - 我对 c# 相当陌生,所以已经复制了 yoru 代码,但不确定我将在哪里应用东西 - 我已经编辑了 abovce 以包含我的代码,你会帮助我更多地展示如何我实现了
  • 嗨@user3223507,我已经查看了您的代码。有多种方法可以使用我的代码。在您的实际实现中,您可以创建一个接受IConfigReader 作为参数的参数化构造函数。在实际实现中使用ConfigReader 并在单元测试方法中传递FakeConfigReader 的对象。
【解决方案2】:

更简单的方法是在 Nunit 项目中创建一个 app.config 文件并复制内容 - 完美运行

【讨论】:

  • 这总是可能的。但是,在对一段代码进行单元测试时,不应依赖任何外部组件。在这种情况下,它变成了集成测试。这就是您在读取配置条目时收到错误的原因,因为您使用了取决于外部因素的代码。快乐编码:)
猜你喜欢
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多