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

11 浏览
0 Comments

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

关于static readonlyconst之间的区别已经有很多答案了。我不是在问那个。我想知道的是,在为单元测试类创建虚拟数据时,其中一个是否明显更有优势。\n以下是使用const的示例:\n

[TestClass]
public class CustomerModelTest
{
   private const string firstName = "Bill";
   private const string lastName = "The Tester";
   // 测试类中的测试方法使用上述数据进行测试。
}

\n以下是使用static readonly的相同示例:\n

[TestClass]
public class CustomerModelTest
{
   private static readonly string firstName = "Bill";
   private static readonly string lastName = "The Tester";
   // 测试类中的测试方法使用上述数据进行测试。
}

\n我的团队对这个问题有争议,我想创建一个标准,让我们能够告诉新员工,“在保存虚拟数据时,默认使用[const/static readonly],除非你有充分的理由不这样做。”\n我目前了解到的是:\n

    \n

  • const在理论上更快。
  • \n

  • static readonly避免了重新编译引用当前程序集的任何dll。
  • \n

  • const不能用于计算值。
  • \n

\n所以,在这种情况下,有没有基于事实的理由,说明其中一个更可取?或者我们的团队应该创建一个任意的标准?

0
0 Comments

在单元测试中,static readonly相对于const有明显的优势吗?

这个问题的出现是因为有人在讨论在单元测试中使用const还是static readonly来定义类级别的常量值。CodeCaster指出,这两者之间不会有任何与性能相关的差异。Jaroen指出,首先,在类级别定义类似于常量的值可能是错误的做法。也许你应该使用类似于AutoFixture来定义那些不重要的值,使用类似于[TestCase]的属性和本地定义的变量/常量来定义那些重要的值。

如果确实需要在字段中使用类似于常量的值,那么在某个时候,你肯定会遇到在单元测试中使用计算值的需求(比如DateTime)。所以,如果一致性是你的首要考虑因素,那么我会选择static readonly。

因此,听起来如果我坚持使用类字段,没有明显的更优选择,但我同意从个人偏好的角度来看,我喜欢static readonly的一致性。

0
0 Comments

在单元测试中,static readonly是否比const有任何明显的优势?

这个问题的出现是因为作者想知道在单元测试中,使用static readonly和const关键字是否有明显的优势。作者提到了一些关于这两个关键字的理论和实际应用的观点,并暗示这个问题其实并不重要。

在单元测试中,const关键字在理论上更快。但是在测试运行器启动、加载程序集、实例化类和通过反射调用测试方法的规模上,你不会注意到这一点。

使用static readonly关键字可以避免重新编译引用当前程序集的任何dll文件。但是,这些字段是私有的,所以这点并不重要。

const关键字不能用于计算值。但是根据作者的描述,你似乎并没有使用这个功能。

所以,作者的建议是随意选择,因为这并不重要。

抱歉,我没有在示例中添加计算值,因为我试图避免问题变得太长。

0