在单元测试中,静态只读是否比const有明显的优势?

时间:2018-02-21 16:12:17

标签: c# unit-testing mstest

关于static readonlyconst之间差异的问题有很多很多答案。我不是在问这个问题。我想知道的是,在为单元测试类创建虚拟数据时,其中一个是否具有明显的优势。

以下是const的示例:

[TestClass]
public class CustomerModelTest
{
   private const string firstName = "Bill";
   private const string lastName = "The Tester";

   // Test methods in the class then use the above data in their tests.
}

以下是与static readonly相同的示例:

[TestClass]
public class CustomerModelTest
{
   private static readonly string firstName = "Bill";
   private static readonly string lastName = "The Tester";

   // Test methods in the class then use the above data in their tests.
}

我的团队正在讨论这个问题,我想创建一个允许我们告诉新员工的标准,"使用[const / static readonly]作为保存虚拟数据的默认值,除非你有充分的理由不这样做。"

到目前为止我所理解的是:

那么在这种情况下,为什么一个人比另一个人更可取?或者我们的团队应该创建一个随意的标准吗?

2 个答案:

答案 0 :(得分:2)

  从理论上说,

const更快。

您不会在测试运行器启动,加载程序集和实例化类以及通过反射调用测试方法的规模上注意到这一点。

  

static readonly使我不必重新编译任何引用当前程序集的dll。

但他们是私人的,所以这是无关紧要的。

  

const不能用于计算值。

您似乎没有使用。

所以翻转硬币并做出决定,无论如何都不重要。

答案 1 :(得分:1)

正如CodeCaster如此专业地指出的那样,你不会在两者之间看到任何与绩效相关的差异。

正如Jaroen所指出的那样,你可能首先通过在类级别定义constant-ish值来采取错误的方法。也许你应该使用像AutoFixture这样的东西来定义不重要的值,[TestCase] - 样式属性和本地定义的变量/常量来定义那些值。

如果你需要使用类似常量的值作为字段,那么在某些时候你必然会遇到在单元测试中使用计算值的需要(a DateTime,例如)。因此,如果一致性是您的首要任务,那么static readonly将成为我的投票。