c# - 只为单元测试添加代码不好吗?

标签 c# unit-testing

<分区>

我正在编写一个类来帮助我对代码进行单元测试。它看起来像这样:

/// <summary>
/// Wrapper for the LogManager class to allow us to stub the logger
/// </summary>
public class Logger
{
    private static ILogger _logger = null;

    /// <summary>
    /// This should be called to get a valid logger.
    /// </summary>
    /// <returns>A valid logger to log issues to file.</returns>
    public static ILogger GetLogger()
    {
        if (_logger == null)
          _logger = LogManager.GetLogger("logger");

        return _logger;
    }

    /// <summary>
    /// This is used by unit tests to allow a stub to be used as a logger.
    /// </summary>
    /// <param name="logger"></param>
    /// <returns></returns>
    public static ILogger GetLogger(ILogger logger)
    {
        _logger = logger;
        return _logger;
    }
}

第二种方法仅用于单元测试。我从未打算在我的生产代码中调用它。

这是不好的做法吗?我是否应该找到另一种不这样做的方法?

最佳答案

在我看来,是的,这是一种不好的做法。单元测试旨在测试代码的实现,而不是真正影响它。在某些情况下,我发现以某种方式组织我的代码/方法以使其更容易/彻底测试它是可行的,但是在被测试的类中编写代码以用于测试中的特定用途是另一回事。

关于c# - 只为单元测试添加代码不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3629562/

相关文章:

c# - 从 DateTime 开始的小时数?以 24 小时格式

c# - Asp.NET 应用程序中的单例

node.js - 如何模拟 route 使用的 knex 函数

javascript - 模拟 node.js 模块

c# - 流畅的断言 : Be() vs Equals()

c# - WindowsIdentity 构造函数使用 LogonUser 的 token 引发异常

c# - ListPicker 在被解雇时不调用 SummaryForSelectedItemsDelegate

c# - 如何优化中继器空白

unit-testing - 无法在 Visual Studio 2019 中分析测试

函数调用时Javascript模拟第三方 Node 库