是否可以纯粹使用单元测试来诊断性能问题?

问题描述 投票:-2回答:1

是否可以在像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并检查初始化的数量?

从“语义学”的角度来看,我认为这种对设计和实现的控制是过度的。开发人员应该了解对象类型及其生命周期等基础知识。但是,我想知道是否有已知的模式/标准实践来解决这类问题?

c# asp.net unit-testing performance-testing
1个回答
0
投票

我会说单元测试不是这样的。您需要在Regex周围创建一个纯粹用于测试目的的抽象,并且还需要开发人员创建一个合适的测试。我认为你最终会处于类似的情况,但代码更加混乱。

因为你想强制执行编码标准,我会改为查看创建an analyser,或者,如果需要,还可以查看FxCop rule,它可以检查Regex是否在方法中被实例化。这当然会变得复杂,因为毫无疑问你会想要打破这个规则的情况,但对我来说这似乎是一个更合适的解决方案,而且开发人员更难以回避。

© www.soinside.com 2019 - 2024. All rights reserved.