1

静态类几乎总是不受欢迎,还是有使用它们的好时机?

例如,在您的应用程序中实现一些无处不在的东西(例如静态类中的安全性)是否有意义?您仍然可以在静态类上使用属性注入来更改实现,如果您要使用 MEF 之类的东西来注入实现,那么我认为它不会妨碍您的测试。

4

1 回答 1

0

我主要将静态类用于无状态辅助类以及当我想创建扩展方法时。我尽量避免具有状态的静态类,因为正如您提到的那样,它可能会妨碍测试。

假设您决定将状态添加到静态类。要测试依赖于其状态的此类的方法,您必须找到一种在测试期间更改此状态的方法。这意味着您必须:

  1. 准备好每次测试前的状态。
  2. 每次测试后清除状态。

这意味着该类将需要提供一种方法(通过内部方法或内部属性设置器)来更改其可能很危险的状态。如果您想创建不可变的类或完全封装其实现细节的类,那么您将无法轻松测试它们(如果根本没有),并且您的测试可能会因更改实现而中断。即使使用 MEF,也不容易做到这一点。

当然,静态类有时会为诸如日志记录之类的问题提供有吸引力的解决方案,正如您在问题中提到的,安全性。在这些情况下,我会选择一个static class将所有调用委托给一个private readonly字段的方法。这样该字段的类就可以正常进行单元测试了。然后,您可以在集成测试中测试静态类。

顺便看看 .NET 的静态类设计指南。它不包含与您的问题相关的任何内容,但包含有价值的建议。

于 2013-01-30T12:48:53.027 回答