## NUnit Quick Start

    using System;
    using NUnit.Framework;

    namespace Bank
    {
      public class Account
      {
        private decimal balance;
        private decimal minimumBalance = 10m;

        public void Deposit(decimal amount)
        {
          balance += amount;
        }

        public void Withdraw(decimal amount)
        {
          balance -= amount;
        }

        public void TransferFunds(Account destination, decimal amount)
        {
          if (balance - amount < minimumBalance)
            throw new InsufficientFundsException();

          destination.Deposit(amount);

          Withdraw(amount);
        }

        public decimal Balance
        {
          get { return balance; }
        }

        public decimal MinimumBalance
        {
          get { return minimumBalance; }
        }
      }

      public class InsufficientFundsException : ApplicationException
      {
      }

      [TestFixture]
      public class AccountTest
      {
        Account source;
        Account destination;

        [SetUp]
        public void Init()
        {
          source = new Account();
          source.Deposit(200m);

          destination = new Account();
          destination.Deposit(150m);
        }

        [Test]
        public void TransferFunds()
        {
          source.TransferFunds(destination, 100m);

          Assert.AreEqual(250m, destination.Balance);
          Assert.AreEqual(100m, source.Balance);
        }

        [Test]
        [ExpectedException(typeof(InsufficientFundsException))]
        public void TransferWithInsufficientFunds()
        {
          source.TransferFunds(destination, 300m);
        }

        [Test]
        [Ignore("Decide how to implement transaction management")]
        public void TransferWithInsufficientFundsAtomicity()
        {
          try
          {
            source.TransferFunds(destination, 300m);
          }
          catch (InsufficientFundsException expected)
          {
          }

          Assert.AreEqual(200m, source.Balance);
          Assert.AreEqual(150m, destination.Balance);
        }
      }
    }

Listing - QuickStart Example