diff --git a/DesignPatternsDotNetCore.sln b/DesignPatternsDotNetCore.sln index 5f9a763..b2e3e15 100644 --- a/DesignPatternsDotNetCore.sln +++ b/DesignPatternsDotNetCore.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29920.165 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32825.248 MinimumVisualStudioVersion = 15.0.26124.0 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdapterPattern", "AdapterPattern\AdapterPattern.csproj", "{79553F75-E8DC-4988-B511-A79CC6A9CDF7}" EndProject @@ -40,6 +40,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuilderPattern", "BuilderPa EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProxyPattern", "ProxyPattern\ProxyPattern.csproj", "{0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FactoryPattern.Tests", "FactoryPattern.Tests\FactoryPattern.Tests.csproj", "{010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -278,6 +280,18 @@ Global {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|x64.Build.0 = Release|Any CPU {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|x86.ActiveCfg = Release|Any CPU {0F8297F6-FA4F-44B6-BF99-0FF71ECCF87A}.Release|x86.Build.0 = Release|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Debug|x64.ActiveCfg = Debug|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Debug|x64.Build.0 = Debug|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Debug|x86.ActiveCfg = Debug|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Debug|x86.Build.0 = Debug|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Release|Any CPU.Build.0 = Release|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Release|x64.ActiveCfg = Release|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Release|x64.Build.0 = Release|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Release|x86.ActiveCfg = Release|Any CPU + {010CD3AB-55CD-479A-B4EC-AAA2D64A0EDC}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/FactoryPattern.Tests/AbstractFactoryTests.cs b/FactoryPattern.Tests/AbstractFactoryTests.cs new file mode 100644 index 0000000..4c8d074 --- /dev/null +++ b/FactoryPattern.Tests/AbstractFactoryTests.cs @@ -0,0 +1,92 @@ +namespace FactoryPattern.Tests +{ + [TestFixture] + public class AbstractFactoryTests + { + [TestCaseSource(nameof(_cheeseCases))] + public void CreateCheese_CheeseFromIngredientsFactories_ReturnsCertainCheeseType(object ingredientsFactory, Type expected) + { + // Arrange, Act + var actual = ((IIngredientsFactory)ingredientsFactory).CreateCheese(); + + // Assert + Assert.That(actual, Is.InstanceOf(expected)); + } + + [TestCaseSource(nameof(_clamCases))] + public void CreateClam_ClamFromIngredientsFactories_ReturnsCertainClamType(object ingredientsFactory, Type expected) + { + // Arrange, Act + var actual = ((IIngredientsFactory)ingredientsFactory).CreateClam(); + + // Assert + Assert.That(actual, Is.InstanceOf(expected)); + } + + [TestCaseSource(nameof(_doughCases))] + public void CreateDough_DoughFromIngredientsFactories_ReturnsCertainDoughType(object ingredientsFactory, Type expected) + { + // Arrange, Act + var actual = ((IIngredientsFactory)ingredientsFactory).CreateDough(); + + // Assert + Assert.That(actual, Is.InstanceOf(expected)); + } + + [TestCaseSource(nameof(_sauceCases))] + public void CreateSauce_SauceFromIngredientsFactories_ReturnsCertainSauceType(object ingredientsFactory, Type expected) + { + // Arrange, Act + var actual = ((IIngredientsFactory)ingredientsFactory).CreateSauce(); + + // Assert + Assert.That(actual, Is.InstanceOf(expected)); + } + + [TestCaseSource(nameof(_veggiesCases))] + public void CreateVeggies_VeggiesFromIngredientsFactories_ReturnsCertainVeggiesSet(object ingredientsFactory, string[] expected) + { + // Arrange, Act + var veggies = ((IIngredientsFactory)ingredientsFactory).CreateVeggies(); + var actual = veggies.Select(v => v.Name); + + // Assert + Assert.That(actual, Is.EqualTo(expected)); + } + + private static readonly List _cheeseCases = + new(new[] + { + new TestCaseData(new NyIngredientsFactory(), typeof(Mozarella)), + new TestCaseData(new ChicagoIngredientsFactory(), typeof(Parmesan)) + }); + + private static readonly List _clamCases = + new(new[] + { + new TestCaseData(new NyIngredientsFactory(), typeof(FrozenClam)), + new TestCaseData(new ChicagoIngredientsFactory(), typeof(FreshClam)) + }); + + private static readonly List _doughCases = + new(new[] + { + new TestCaseData(new NyIngredientsFactory(), typeof(ThinCrust)), + new TestCaseData(new ChicagoIngredientsFactory(), typeof(DeepDish)) + }); + + private static readonly List _sauceCases = + new(new[] + { + new TestCaseData(new NyIngredientsFactory(), typeof(CherryTomato)), + new TestCaseData(new ChicagoIngredientsFactory(), typeof(PlumTomato)) + }); + + private static readonly List _veggiesCases = + new(new[] + { + new TestCaseData(new NyIngredientsFactory(), new string[] { "Onions", "Bell Peppers", "Olives" }), + new TestCaseData(new ChicagoIngredientsFactory(), new string[] { "Onions", "Cucumber", "Bell Peppers" }) + }); + } +} diff --git a/FactoryPattern.Tests/FactoryMethodTests.cs b/FactoryPattern.Tests/FactoryMethodTests.cs new file mode 100644 index 0000000..3f550f2 --- /dev/null +++ b/FactoryPattern.Tests/FactoryMethodTests.cs @@ -0,0 +1,36 @@ +namespace FactoryPattern.Tests +{ + [TestFixture] + public class FactoryMethodTests + { + [TestCase(typeof(ClamPizza), "Clam")] + [TestCase(typeof(CheesePizza), "Cheese")] + [TestCase(typeof(VeggiePizza), "Veggie")] + public void Create_PizzaFromNyPizzaFactory_ReturnsPizzaOfCertainType(Type expected, string pizzaType) + { + // Arrange + var nyPizzaFactory = new NyPizzaFactory(); + + // Act + var actual = nyPizzaFactory.Order(pizzaType); + + // Assert + Assert.That(actual, Is.InstanceOf(expected)); + } + + [TestCase(typeof(ClamPizza), "Clam")] + [TestCase(typeof(CheesePizza), "Cheese")] + [TestCase(typeof(VeggiePizza), "Veggie")] + public void Create_PizzaFromChicagoPizzaFactory_ReturnsPizzaOfCertainType(Type expected, string pizzaType) + { + // Arrange + var chicagoPizzaFactory = new ChicagoPizzaFactory(); + + // Act + var actual = chicagoPizzaFactory.Order(pizzaType); + + // Assert + Assert.That(actual, Is.InstanceOf(expected)); + } + } +} diff --git a/FactoryPattern.Tests/FactoryPattern.Tests.csproj b/FactoryPattern.Tests/FactoryPattern.Tests.csproj new file mode 100644 index 0000000..cb32275 --- /dev/null +++ b/FactoryPattern.Tests/FactoryPattern.Tests.csproj @@ -0,0 +1,23 @@ + + + + net6.0 + enable + enable + + false + + + + + + + + + + + + + + + diff --git a/FactoryPattern.Tests/Usings.cs b/FactoryPattern.Tests/Usings.cs new file mode 100644 index 0000000..cefced4 --- /dev/null +++ b/FactoryPattern.Tests/Usings.cs @@ -0,0 +1 @@ +global using NUnit.Framework; \ No newline at end of file diff --git a/FactoryPattern/Properties/AssemblyInfo.cs b/FactoryPattern/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..bae1a36 --- /dev/null +++ b/FactoryPattern/Properties/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly:InternalsVisibleTo("FactoryPattern.Tests")]