【问题标题】:Suitable use of Tuple<>, in a unit test?在单元测试中合适使用元组<>?
【发布时间】:2012-04-23 13:19:39
【问题描述】:

在编写一组单元测试(针对现有遗留组件)时,我想要一种方法来关联错误代码列表(将由我模拟的服务返回)和相应错误消息列表(我正在测试的组件将返回)。

似乎使用List&lt;Tuple&lt;string, string&gt;&gt; 是定义此关联的一种不错的简单方法。

var errorCodesAndMessages = new List<Tuple<string, string>>
{
    Tuple.Create("CODE1", "Error message 1"),
    Tuple.Create("CODE2", "Error message 2")
    // etc...
};

在我的单元测试中,我可以循环遍历errorCodesAndMessages,设置我的模拟服务以返回 nth 错误代码,并断言被测组件返回 nth 错误信息。

这是对Tuple&lt;&gt;的良好使用还是滥用?

编辑

回复表明Dictionary&lt;string, string&gt; 在这种情况下会更好。我不得不同意。但是,如果(出于某种原因)我们需要关联三段数据(例如错误代码、用户显示的错误消息和技术错误消息)怎么办

那么这是Tuple&lt;&gt;的好用处吗?

Tuple.Create("CODE1", "User error message", "Technical error message")

【问题讨论】:

  • 没关系,但我可能会使用Dictionary&lt;TKey, TValue&gt;,因为我可能需要从代码中查找错误(我想代码是唯一的)。
  • 这主要是一个 DRY 问题。
  • @CodeInChaos - 你能详细说明一下吗?

标签: c# unit-testing .net-4.0 tuples


【解决方案1】:

元组仍然可以工作,但是如果您想跟踪有关错误代码的详细信息,我认为如果您创建一个简单的类来组合错误代码的详细信息并且仍然使用字典来跟踪错误代码键。

Dictionary<string, ErrorCodeDetails>

【讨论】:

    【解决方案2】:

    似乎Dictionary&lt;string, string&gt; 是一种更好的处理方式,因为假设您不会有重复的错误代码是相当安全的。 Dictionary 还具有对键进行恒定时间查找的优势。

    var errorCodesAndMessages = new Dictionary<string, string>()
    {
        { "CODE1", "Error message 1" },
        { "CODE2", "Error message 2" },
        // etc...
    };
    

    代码也更短。

    【讨论】:

    • 仅适用于 2 个元素。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多