我已经编写了以下内容来存储Singleton以进行单元测试。
public static class LocalisationSetter
{
[ThreadStatic]
private static CultureInfo _cultureInfo;
public static void Set(CultureInfo cultureInfo)
{
_cultureInfo = cultureInfo;
Localisation.Current.Culture = _cultureInfo; // Setting The singleton.
}
}
在我的测试中,我做了类似下面的事情:
LocalisationSetter.Set(new CultureInfo("fr-FR"));
上述方法似乎有点“脏”......
只是想知道是否有更好的方法。我需要确保对“本地化”的更改只对线程可见。
答案 0 :(得分:3)
拥有一个“Setter”的类是一种相当奇特的模式。正如DStanley评论的那样,如果没有使Localization.Current
线程静态,上述内容将无法正常工作:
public class Localization{
[ThreadStatic]
private static Localization _current;
public static Current {
get { _current = _current ?? new Localization(); return _current }
set { _current = value; }
}
}
话虽这么说,这通常是一种非常特殊的模式,因为这有效地创建了“全局”变量,这通常会使单元测试和软件维护变得更加复杂。
(上面的代码创建了可能随时更改的短暂状态,从而影响代码的行为)。
考虑使用依赖注入,或者至少将这些“全局”变量组织到一些聚合对象中,以便更容易跟踪这些上下文对象的事实。