Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试需要更多的时间来做减法运算_C#_Unit Testing - Fatal编程技术网

C# 单元测试需要更多的时间来做减法运算

C# 单元测试需要更多的时间来做减法运算,c#,unit-testing,C#,Unit Testing,我通过编写简单的例子来尝试单元测试 测试代码: public class Operations { public static double Subtraction(double number1, double number2) { return number1 - number2; } public static double Addition(double number1, double number2) { retu

我通过编写简单的例子来尝试单元测试

测试代码:

public class Operations
{
    public static double Subtraction(double number1, double number2)
    {
        return number1 - number2;
    }

    public static double Addition(double number1, double number2)
    {
        return number1 + number2;
    }

    public static double Division(double number1, double number2)
    {
        if (number2 != 0)
        {
            return number1 / number2;
        }
        else
        {
            return number1;
        }
    }

    public static double Multiplication(double number1, double number2)
    {
        return number1 * number2;
    }
}
试验方法:

[TestClass()]
public class OperationsTests
{
    [TestMethod()]
    public void SubtractionTest1()
    {
        double number1 = 0;
        double number2 = 10;
        double result = Operations.Subtraction(number1, number2);
        Assert.AreEqual(-10, result);
    }

    [TestMethod()]
    public void SubtractionTest2()
    {
        double number1 = 10;
        double number2 = 0;
        double result = Operations.Subtraction(number1, number2);
        Assert.AreEqual(10, result);
    }

    [TestMethod()]
    public void SubtractionTest3()
    {
        double number1 = 10;
        double number2 = 10;
        double result = Operations.Subtraction(number1, number2);
        Assert.AreEqual(0, result);
    }

    [TestMethod()]
    public void AdditionTest1()
    {
        double number1 = 0;
        double number2 = 10;
        double result = Operations.Addition(number1, number2);
        Assert.AreEqual(10, result);
    }

    [TestMethod()]
    public void AdditionTest2()
    {
        double number1 = 10;
        double number2 = 0;
        double result = Operations.Addition(number1, number2);
        Assert.AreEqual(10, result);
    }

    [TestMethod()]
    public void AdditionTest3()
    {
        double number1 = 10;
        double number2 = 10;
        double result = Operations.Addition(number1, number2);
        Assert.AreEqual(20, result);
    }

    [TestMethod()]
    public void DivisionTest1()
    {
        double number1 = 0;
        double number2 = 10;
        double result = Operations.Division(number1, number2);
        Assert.AreEqual(0, result);
    }

    [TestMethod()]
    public void DivisionTest2()
    {
        double number1 = 10;
        double number2 = 0;
        double result = Operations.Division(number1, number2);
        Assert.AreEqual(10, result);
    }

    [TestMethod()]
    public void DivisionTest3()
    {
        double number1 = 10;
        double number2 = 10;
        double result = Operations.Division(number1, number2);
        Assert.AreEqual(1, result);
    }

    [TestMethod()]
    public void MultiplicationTest1()
    {
        double number1 = 0;
        double number2 = 10;
        double result = Operations.Multiplication(number1, number2);
        Assert.AreEqual(0, result);
    }

    [TestMethod()]
    public void MultiplicationTest2()
    {
        double number1 = 10;
        double number2 = 0;
        double result = Operations.Multiplication(number1, number2);
        Assert.AreEqual(0, result);
    }

    [TestMethod()]
    public void MultiplicationTest3()
    {
        double number1 = 10;
        double number2 = 10;
        double result = Operations.Multiplication(number1, number2);
        Assert.AreEqual(100, result);
    }
}
每个测试都在执行,没有任何错误,但我注意到Test1总是花费7-8-9ms,而其他测试花费不到1ms,你能解释为什么吗

测试结果:


MSTest将随机化单元测试的运行顺序,因为这有时会暴露定时或共享状态中的错误

首先运行哪一个测试将花费更长的时间,因为JIT编译每个方法和类型都需要它,如果这些类型中有任何一个需要执行静态初始化,那么这也会触发

我有一个单元测试套件,第一个测试总是需要大约0.5秒,因为我正在初始化依赖注入和模拟框架。每次测试后初始化大约需要1到2毫秒。所以你在这里看到的行为是完全正常的


对于性能测试,您必须平均您的结果,并放弃您的第一个结果,以从中删除初始化时间。如果初始化速度与您的应用程序相关,您还应该测试初始化速度,但对于启动一次然后保持在线并准备就绪的服务器来说,这通常无关紧要。

可能是由于一些测试初始化。如果你真的为此而烦恼——我建议你不要这样做——使用一个探查器,比如DotTrace,来确定哪个方法调用需要多少时间,以及时间差发生在哪里。@HimBromBeere是对的。无论何时运行测试,由于测试运行程序和其他相关组件的一次性初始化,其中一个测试的运行时间似乎比其他测试长。如果先确定运行,每次都可能是一个相同的测试,这并不意味着在性能方面实现有任何问题。但考虑到Test1不是第一个执行的测试(如果测试列表顺序没有错误),这在我看来是不合逻辑的测试列表顺序只是按字母顺序列出的测试,与实际执行的测试顺序没有关联。哦,你是对的@Pac0我刚刚注意到,是的,减法测试1是第一个,所以初始化需要时间,伙计们,现在更清楚了^^