如果运行速度太慢,在单元测试中测量方法的执行时间以抛出异常是一个好习惯吗?

Flo*_*ian 4 c# unit-testing mstest

一切都在标题中,我想知道这是不是一个好习惯:

[TestMethod]
public void Compute_Array_In_Less_1_Second()
{
    Stopwatch watcher = new Stopwatch();

    int[] A = Enumerable.Range(0, 50000).Select(i => GetRandomNumber(MIN_INT, MAX_INT)).ToArray();

    watcher.Start();
    int[] R = Program.MethodThatReturnsAnArray(A);
    watcher.Stop();

    if (watcher.ElapsedMilliseconds > 1000)
        Assert.Fail("The method runs in more 1 second");
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Hen*_*man 9

不,这不对.

单元测试不在"正常"条件下执行,因此结果将毫无用处.

使用单元测试来验证代码的正确语义.

在接近生产环境的条件下设置性能测试(通常是端到端).


man*_*lds 3

您应该使用测试框架提供的适当机制,例如:http://nunit.org/index.php?p =timeout&r=2.5

但请注意,您不想在任何地方都这样做(为了衡量性能),而是为了测试该单元实际上是否及时完成或超时(如果需要这样做)。