Here’s a basic test; looks simple right? Well, that’s because it is. A new Order is given three different order items, each with a quantity of one. We assert (using nunit) that there are three OrderItems, then RemoveAllItems and assert that there are zero. [ Test ] public void An_Order_should_be_able_to_remove_all_items() { var product1 = new Product ( "part1" , 10m); var product2 = new Product ( "part2" , 20m); var product3 = new Product ( "part3" , 30m); var order = new Order (); order.AddOrderItem(product1, 1); order.AddOrderItem(product2, 1); order.AddOrderItem(product3, 1); Assert .That(order.OrderItems.Count(), Is .EqualTo(3)); order.RemoveAllItems(); Assert .That(order.OrderItems.Count(), Is .EqualTo(0)); } If you know where this is going, you’re at least one step ahead of me when I wrote the RemoveAllItems function. It does exactly what it is supposed to do, and this test passes. There’s more than one way to implement the RemoveAllItems function and initially I chose a bad one. The following is the original implementation. Looking back, it’s obvious that it is wrong, but at the time, it must have been “the way” to do it. public class Order : IOrder { private IList < IOrderItem > orderItems;...