public void AssignToRoute_03() { // arrange: TrackingId id = new TrackingId("CRG01"); IItinerary itinerary = MockRepository.GenerateStrictMock <IItinerary>(); DateTime finalArrival1 = DateTime.Now + TimeSpan.FromDays(30); itinerary.Expect(i => i.Equals(null)).Return(false).Repeat.AtLeastOnce(); itinerary.Expect(i => i.FinalArrivalDate).Return(finalArrival1).Repeat.AtLeastOnce(); IItinerary itinerary2 = MockRepository.GenerateStrictMock <IItinerary>(); itinerary2.Expect(i => i.Equals(itinerary)).Return(true).Repeat.AtLeastOnce(); IRouteSpecification specification = MockRepository.GenerateStrictMock <IRouteSpecification>(); specification.Expect(s => s.IsSatisfiedBy(itinerary)).Return(true).Repeat.Once(); CargoState initialState = new NewCargo(id, specification); CargoState state = initialState.AssignToRoute(itinerary); // act: CargoState newState = state.AssignToRoute(itinerary2); // assert: Assert.AreEqual(finalArrival1, newState.EstimatedTimeOfArrival); Assert.AreEqual(initialState.GetType(), state.GetType()); Assert.AreNotSame(initialState, state); Assert.IsNotNull(newState); Assert.AreSame(state, newState); }