large base of unit tests,
supported by a smaller layer of integration tests,
with an even smaller layer of functional tests
Different approaches:
Top to bottom or vice versa
It's a choice
We will start here
public void IsEven_NumberIsEven_False(int number, bool expected)
{
Lot's of possibilities:
It's a personal choice or/and project/company choice
Refactor
class Node {
}
public class Recursion
{
// sum of n natural numbers
// 1 + 2 + 3 + ... + n
// for n = 5, the sum is 15, because 1 + 2 + 3 + 4 + 5 = 15
public static int Sum(int n)
{
}
}
public class Recursion
{
// sum of n natural numbers
// 1 + 2 + 3 + ... + n
// for n = 5, the sum is 15, because 1 + 2 + 3 + 4 + 5 = 15
public static int Sum(int n)
{
if (n == 0) //base case
{
return 0;
}
}
}
public class Recursion
{
// sum of n natural numbers
// 1 + 2 + 3 + ... + n
// for n = 5, the sum is 15, because 1 + 2 + 3 + 4 + 5 = 15
public static int Sum(int n)
{
if (n == 0) //base case
{
return 0;
}
else
{
return n + Sum(n - 1); //recursive case
}
}
}
public static void Main(String[] args) {
Console.WriteLine(Recursion.Sum(3));
}
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
public class Recursion
{
public static int Sum(int n)
{
if (n == 0) //base case
{
return 0;
}
else
{
return n + Sum(n - 1); //recursive case
}
}
}
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
Sum(3)
Sum(3)
public class Recursion
{
public static int Sum(int n)
{
if (n == 0) //base case
{
return 0;
}
else
{
return n + Sum(n - 1); //recursive case
}
}
}
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
Sum(3)
Sum(3)
Sum(3)
3 + Sum(2)
public class Recursion
{
public static int Sum(int n)
{
if (n == 0) //base case
{
return 0;
}
else
{
return n + Sum(n - 1); //recursive case
}
}
}
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
Sum(3)
Sum(3)
Sum(3)
3 + Sum(2)
Sum(2)
2 + Sum(1)
public class Recursion
{
public static int Sum(int n)
{
if (n == 0) //base case
{
return 0;
}
else
{
return n + Sum(n - 1); //recursive case
}
}
}
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
Sum(3)
Sum(3)
Sum(3)
3 + Sum(2)
Sum(2)
2 + Sum(1)
Sum(2)
2 + Sum(1)
Sum(2)
2 + Sum(1)
Sum(1)
1 + Sum(0)
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
2 + Sum(1)
2 + Sum(1)
Sum(2)
2 + Sum(1)
Sum(1)
1 + Sum(0)
public class Recursion
{
public static int Sum(int n)
{
if (n == 0) //base case
{
return 0;
}
else
{
return n + Sum(n - 1); //recursive case
}
}
}
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
Sum(3)
Sum(3)
Sum(3)
3 + Sum(2)
Sum(2)
2 + Sum(1)
Sum(2)
2 + Sum(1)
Sum(2)
2 + Sum(1)
Sum(1)
1 + Sum(0)
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
2 + Sum(1)
2 + Sum(1)
Sum(2)
2 + Sum(1)
Sum(1)
1 + Sum(0)
Sum(0)
0
Sum(1)
1 + Sum(0)
public class Recursion
{
public static int Sum(int n)
{
if (n == 0) //base case
{
return 0;
}
else
{
return n + Sum(n - 1); //recursive case
}
}
}
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
Sum(3)
Sum(3)
Sum(3)
3 + Sum(2)
Sum(2)
2 + Sum(1)
Sum(2)
2 + Sum(1)
Sum(2)
2 + Sum(1)
Sum(1) = 1
1 + 0
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
2 + Sum(1)
2 + Sum(1)
Sum(2)
2 + Sum(1)
public class Recursion
{
public static int Sum(int n)
{
if (n == 0) //base case
{
return 0;
}
else
{
return n + Sum(n - 1); //recursive case
}
}
}
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
Sum(3)
Sum(3)
Sum(3)
3 + Sum(2)
Sum(2)
2 + Sum(1)
Sum(2)
2 + Sum(1)
Sum(2)
2 + Sum(1)
Sum(1) = 1
1 + 0
Sum(3)
= 3 + Sum(2)
= 3 + (2 + Sum(1))
= 3 + (2 + (1 + Sum(0)))
= 3 + (2 + (1 + (0)))
2 + Sum(1)
2 + Sum(1)
Sum(2)
2 + Sum(1)