public void ShouldCreateASingleMilestoneForAKnownGoal() { const string expectedDescription = "Testing a milestone"; double expectedTarget = 230d; DateTime expectedDateMet = DateTime.Now; int expectedGoalId = 1; int expectedMilestoneId = 10; Model.Milestone milestone = new Model.Milestone(expectedTarget, expectedDescription, expectedDateMet); Model.Milestone expectedResultandMilestone = new Model.Milestone(expectedMilestoneId, expectedTarget, expectedDescription, expectedDateMet); string expectedSqlStatement = "INSERT INTO saver.Milestone (target, description, datemet, goalid) VALUES (@Target, @Description, @DateMet, @GoalId);"; mockDataAccess.Setup ( da => da.ExecuteQuery <Model.Milestone> ( It.Is <string>(val => val.Equals(expectedSqlStatement)), It.Is <Dictionary <string, object> > ( val => (int)val["GoalId"] == expectedGoalId && (string)val["Description"] == expectedDescription && (double)val["Target"] == expectedTarget && (DateTime?)val["DateMet"] == expectedDateMet ) ) ).Returns(new List <Model.Milestone>() { expectedResultandMilestone }); mockSqlStringService.Setup(ss => ss.GetSqlFromResource(It.IsAny <string>())).Returns(expectedSqlStatement); IMilestoneRepository repository = new MilestoneRepository(mockDataAccess.Object, mockSqlStringService.Object); //Act Model.Milestone returnedMilestone = repository.CreateForGoal(milestone, expectedGoalId); //Assert returnedMilestone.Should().NotBeNull(); returnedMilestone.Id.Should().Be(expectedMilestoneId); returnedMilestone.Should().BeEquivalentTo(expectedResultandMilestone); }