是否可以在像NUnit这样的框架中编写单元测试,以便检查框架类库提供的对象(如RegularExpression)是否仅在应用程序代码中初始化一次(或限制时间)? 是否可以(并推荐)进行单元测试,以对对象初始化及其生命周期强制执行某些规则?例如,在下面的代码中 -
class Utility{
public bool IsGuide(string key){
string strRegex = @"\b[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-F0-9]{12}\b";
Regex guidRegEx = new Regex(strRegex, RegexOptions.Compiled);
return guidRegEx.IsMatch(stringValue);
}
}
上面的代码是从page.aspx中的循环中调用的。每次调用此页面时,由于在内存中初始化了大量的RegEx对象,因此会遇到性能损失。解决方案是将RegEx对象初始化为静态类级别实例。
为了强制不再意外修改此代码,可以模拟RegEx并检查初始化次数吗?
来自'语义'观点我认为这种对设计和实施的控制是过度的。开发人员应该了解对象类型及其生命周期等基础知识。但是,我想知道是否有已知的模式/标准做法来解决这类问题?
答案 0 :(得分:0)
我会说单元测试不适合这个。您需要在Regex
周围创建一个纯粹用于测试目的的抽象,并且还要依赖开发人员来创建适当的测试。我认为你最终会处于类似的情况,但代码会更加混乱。
由于您希望强制执行编码标准,我会考虑创建an analyser,或者,如果需要,还可以查看FxCop rule,它可以检查Regex
是否正在实例化在一个方法里面。这当然会变得复杂,因为毫无疑问, 想要破坏这条规则的情况,但对我来说这似乎是一个更合适的解决方案,而且开发人员更难以回避。