[ExpectedException(typeof(ArgumentNullException))] // Assert public void PetReportVisitor_CTor_Failure_ArgumentNullException() { // Arrange // Act var uut = new PetReportVisitor(null); }
public void PetReportVisitor_Visit_WritesDogAndCatLinesToStream_Success() { // Arrange var mockTextWriter = new Mock <TextWriter>(); var uut = new PetReportVisitor(mockTextWriter.Object); // Act uut.Visit(new Dog(new Owner { Firstname = "Jim", Lastname = "Rogers", JoinedPractice = new DateTime(2020, 7, 20) }) { NumberOfVisits = 5 }); uut.Visit(new Cat(new Owner { Firstname = "Steve", Lastname = "Roberts", JoinedPractice = new DateTime(2002, 5, 6) }) { NumberOfVisits = 20, NumberOfLives = 9 }); // Assert mockTextWriter.Verify(x => x.WriteLine(It.Is <string>(item => item == "Jim Rogers, 20/07/2020 00:00:00, 5, ")), Times.Once()); mockTextWriter.Verify(x => x.WriteLine(It.Is <string>(item => item == "Steve Roberts, 06/05/2002 00:00:00, 20, 9")), Times.Once()); }
static void Main(string[] args) { Console.WriteLine("Report achieved using a polymorphic visitor pattern"); Console.WriteLine("-----------------------------------------"); var petsToVisit = new Pets(); petsToVisit.Attach(new Dog(new Owner { Firstname = "Jim", Lastname = "Rogers", JoinedPractice = DateTime.Now }) { NumberOfVisits = 5 }); petsToVisit.Attach(new Dog(new Owner { Firstname = "Tony", Lastname = "Smith", JoinedPractice = new DateTime(1985, 7, 13) }) { NumberOfVisits = 10 }); petsToVisit.Attach(new Cat(new Owner { Firstname = "Steve", Lastname = "Roberts", JoinedPractice = new DateTime(2002, 5, 6) }) { NumberOfVisits = 20, NumberOfLives = 9 }); var petReportVisitor = new PetReportVisitor(Console.Out); petsToVisit.Accept(petReportVisitor); Console.WriteLine("-----------------------------------------"); Console.WriteLine("Report achieved using the DynamicObject"); Console.WriteLine("-----------------------------------------"); Console.WriteLine(" >> to file: PetsReport.csv"); var pets = new List <IReportable>() { new Dog(new Owner { Firstname = "Jim", Lastname = "Rogers", JoinedPractice = DateTime.Now }) { NumberOfVisits = 5 }, new Dog(new Owner { Firstname = "Tony", Lastname = "Smith", JoinedPractice = new DateTime(1985, 7, 13) }) { NumberOfVisits = 10 }, new Cat(new Owner { Firstname = "Steve", Lastname = "Roberts", JoinedPractice = new DateTime(2002, 5, 6) }) { NumberOfVisits = 20, NumberOfLives = 9 } }; using (StreamWriter writer = File.CreateText("PetsReport.csv")) { var report = new PetReportGeneratorDynamic(writer); report.GenerateReport(pets); writer.Flush(); } Console.WriteLine("-----------------------------------------"); Console.WriteLine("Report achieved using the DynamicObject"); Console.WriteLine("-----------------------------------------"); { var report = new PetReportGeneratorDynamic(Console.Out); report.GenerateReport(pets); } var iReportablePets = new List <IReportable>() { new Dog(new Owner { Firstname = "Jim", Lastname = "Rogers", JoinedPractice = DateTime.Now }) { NumberOfVisits = 5 }, new Dog(new Owner { Firstname = "Tony", Lastname = "Smith", JoinedPractice = new DateTime(1985, 7, 13) }) { NumberOfVisits = 10 }, new Cat(new Owner { Firstname = "Steve", Lastname = "Roberts", JoinedPractice = new DateTime(2002, 5, 6) }) { NumberOfVisits = 20, NumberOfLives = 9 } }; Console.WriteLine("-----------------------------------------"); Console.WriteLine("Report achieved using a direct a direct Reflection implementation"); Console.WriteLine("-----------------------------------------"); { var report = new PetReportGeneratorReflective(Console.Out); report.GenerateReport(iReportablePets); } Console.ReadKey(); }