You need VS2010, and NUnit if you want to try this code as is on your machine.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
namespace LearningCSharp40
{
public class Division
{
public int Divide(int dividend, int divisor)
{
return dividend / divisor;
}
}
[TestFixture]
public class LearnNamedParameters
{
Division division = new Division();
private int quotientFromPositional = 0;
[SetUp]
public void Setup()
{
quotientFromPositional = division.Divide(20, 10); // positional
}
[Test]
public void QuotientShouldbeSameWhenCalledWithNamedParameters()
{
int quotientWithNamedParams = division.Divide(dividend: 20, divisor: 10); // named parameters
Assert.AreEqual(quotientFromPositional, quotientWithNamedParams,
"quotient should be 2 even with named parameters");
}
[Test]
public void NamedParametersInDifferentOrder()
{
int quotientWithNamedParamsInDifferentOrder = division.Divide( dividend:20,divisor:10); // Order is different
Assert.AreEqual(quotientFromPositional, quotientWithNamedParamsInDifferentOrder,
"quotient should be same even called with named paratmeters in different parameter");
}
[Test]
public void QuotientShouldBeSameWhenMixOfPositionalAndNamedApproachIsUsed()
{
int quotient = division.Divide( 20, divisor: 10);
Assert.AreEqual(quotientFromPositional, quotient,
"quotient should be same even with mix of positional, and named parameters");
}
[Test]
[Ignore]
public void NamedParametersCantProcedePosition_CompilerError()
{
Division division = new Division();
//Uncomment to see the compiler error...
// int quotient = division.Divide( dividend: 20,10); // named parameters cannot procede positional
// Assert.AreEqual(2, quotient, "quotient should be 2 even with named parameters");
}
[Test]
[Ignore]
public void NamedParameterSpecifiesAParameterForWhichAPositionalArgumentHasAlreadyGiven_CompilerError()
{
Division division = new Division();
//Uncomment to see the compiler error...
// int quotient = division.Divide( 20,dividend:20);
}
}
}