是否可以纯粹使用单元测试来诊断性能问题?
Is it possible to diagnose performance issues purely using unit tests?
是否可以在像 NUnit 这样的框架中编写单元测试,以便检查框架 class 库提供的对象(如 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 对象初始化为静态 class 级别实例。
为了确保此代码不会再次被意外修改,可以模拟 RegEx 并检查初始化次数吗?
从 'semantics' 的角度来看,我认为这种对设计和实现的控制是矫枉过正的。开发人员应该了解对象类型及其生命周期等基础知识。但是我想知道是否有已知的 patterns/standard 实践来解决此类问题?
我会说单元测试不是解决这个问题的方法。您需要纯粹出于测试目的围绕 Regex
创建抽象,并且还依赖开发人员创建适当的测试。我想你最终会遇到类似的情况,但代码更混乱。
因为你想强制执行编码标准,所以我会考虑创建 an analyser or, if required, an FxCop rule,它可以检查 Regex
是否在方法内部被实例化。这当然会变得复杂,因为毫无疑问,在某些情况下您 会 想要打破这条规则,但这对我来说似乎是一个更合适的解决方案,而且开发人员更难回避。
是否可以在像 NUnit 这样的框架中编写单元测试,以便检查框架 class 库提供的对象(如 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 对象初始化为静态 class 级别实例。
为了确保此代码不会再次被意外修改,可以模拟 RegEx 并检查初始化次数吗?
从 'semantics' 的角度来看,我认为这种对设计和实现的控制是矫枉过正的。开发人员应该了解对象类型及其生命周期等基础知识。但是我想知道是否有已知的 patterns/standard 实践来解决此类问题?
我会说单元测试不是解决这个问题的方法。您需要纯粹出于测试目的围绕 Regex
创建抽象,并且还依赖开发人员创建适当的测试。我想你最终会遇到类似的情况,但代码更混乱。
因为你想强制执行编码标准,所以我会考虑创建 an analyser or, if required, an FxCop rule,它可以检查 Regex
是否在方法内部被实例化。这当然会变得复杂,因为毫无疑问,在某些情况下您 会 想要打破这条规则,但这对我来说似乎是一个更合适的解决方案,而且开发人员更难回避。