I was trying Unit Tests by writing simple examples.
Tested code:
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;
}
}
Test Methods:
[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);
}
}
Every test is executing without any error but i noticed that SubtractionTest1 took always 7-8-9ms while the others take less than 1ms, can you explain me why?
Tests result:

MSTest will randomise the order that unit tests run in, as this can sometimes expose bugs in timing or shared state.
Which ever test you run first will take longer because it will be the one required to both JIT compile each of your methods and types and if any of those types have static initialisation to perform then this will also trigger.
I had a unit test suite where the first test would always take approximately 0.5s because I was initialising both the dependency injection and mocking frameworks. Every test post initialisation would take approximately 1ms to 2ms. So the behaviour you see here is totally normal.
For performance testing you must average your results and discard your first result to remove intialisation time from them. You should also test your initialisation speed if that is relevant to your application, but it's usually irrelevant for a server that boots once then stays online and ready.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With