gpt4 book ai didi

C# unit test akward 运行时

转载 作者:行者123 更新时间:2023-11-30 17:47:08 24 4
gpt4 key购买 nike

我正在 Win8 上的 Visual Studio 2013 中开发 C# 工具。

我刚开始在一个非常简单的部分为单元测试支付部门费用(我感到羞耻;)):

有一个几何向量类。想检查 init 是否有效。代码如下。

发现测试方法的运行时间很奇怪:当如下运行时,测试的时间是

TestCreateNonZeroVertex  <1ms
TestCreateZeroVertex 4ms
TestModifyVertex <1ms

按顺序多次执行测试(以消除系统的一些缓冲内容)稳定在这个值上。

首先想到:Garabage Collector -> 在 TearDown 中强制执行 GC(等待完成)。结果:时间跨度增加(如预期)但成比例

TestCreateNonZeroVertex  2ms
TestCreateZeroVertex 8ms (with peaks to 13ms)
TestModifyVertex 2ms

由于代码很少,而且 TestModifyVertex 实际上是 TestCreateZeroVertex + X,我不明白这种差异。是因为 TestCreateZeroVertex 是 TestSuite 中的第一个方法吗?如果是这样,对我来说这听起来像是测试环境中的错误。 (为什么测量的部分还是拆机?)

如果有人能解释为什么时间漂移如此强烈,以及如何消除这种转变(为了兼容性),我将不胜感激。

这里是类(class)的开始:

public class Vertex
{
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }

public Vertex()
{
X = 0;
Y = 0;
Z = 0;
}

public Vertex(double x, double y, double z)
{
X = x;
Y = y;
Z = z;
}
...

非常简单。

我做了一些测试方法:

    [TestMethod]
public void TestCreateZeroVertex()
{
Vertex v = new Vertex();
Assert.AreEqual<double>(0.0, v.X, "Expected X value to be zero, is: " + v.X);
Assert.AreEqual<double>(0.0, v.Y, "Expected Y value to be zero, is: " + v.Y);
Assert.AreEqual<double>(0.0, v.Z, "Expected Z value to be zero, is: " + v.Z);
}

[TestMethod]
public void TestCreateNonZeroVertex()
{
double x = 1.1, y = 2.2, z = 3.3;
Vertex v = new Vertex(x, y, z);
Assert.AreEqual<double>(x, v.X, "Expected X value to be " + x + ", is: " + v.X);
Assert.AreEqual<double>(y, v.Y, "Expected Y value to be " + y + ", is: " + v.Y);
Assert.AreEqual<double>(z, v.Z, "Expected Z value to be " + z + ", is: " + v.Z);
}

[TestMethod]
public void TestModifyVertex()
{
double x = 1.1, y = 2.2, z = 3.3;
Vertex v = new Vertex();
Assert.AreEqual<double>(0.0, v.X, "Expected X value to be zero, is: " + v.X);
Assert.AreEqual<double>(0.0, v.Y, "Expected Y value to be zero, is: " + v.Y);
Assert.AreEqual<double>(0.0, v.Z, "Expected Z value to be zero, is: " + v.Z);

v.X = x;
v.Y = y;
v.Z = z;
Assert.AreEqual<double>(x, v.X, "Expected X value to be " + x + ", is: " + v.X);
Assert.AreEqual<double>(y, v.Y, "Expected Y value to be " + y + ", is: " + v.Y);
Assert.AreEqual<double>(z, v.Z, "Expected Z value to be " + z + ", is: " + v.Z);
}

最佳答案

当单独运行测试时抛出 VS 2012 测试资源管理器,它们显示或多或少相等的持续时间 - 每个几毫秒。然而,执行所有这些结果会显示与问题中所示类似的结果,尽管在我的例子中,TestModifyVertex 运行时间更长。

如果没有做更深入的研究,我会怀疑这里有一些类加载问题 - 可能是您的代码或(这里可能是这种情况,因为您的示例非常紧凑)一些 MSTest(或任何测试运行器你正在使用)代码。后续测试可能会从已加载的类中获益。

因此,为了获得可比较的结果,您可以尝试分别运行每个测试,但我认为这不是一个好主意。我们曾尝试以类似的方式检测性能下降,但由于误报过多而放弃。 MSTest 似乎不是解决此问题的合适工具。

要获取有关正在发生的事情的更多信息,请根据您的代码尝试分析测试的 Visual Studio 版本。

关于C# unit test akward 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25076135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com