using NUnit.Framework; namespace Kata1 { [TestFixture] public class UnitTests { Product CreateProduct(AbstractFactory productFactory) { return productFactory.CreateProduct(); } [Test] public void ProductName_CreatedWithConcreteFactory1_IsProductA1() { //Arrenge var product = CreateProduct(new ConcreteFactory1()); //Act var result = product.Name; //Assert Assert.AreEqual("Product1",result); } [Test] public void ProductName_CreatedWithConcreteFactory2_IsProductA2() { //Arrenge var product = CreateProduct(new ConcreteFactory2()); //Act var result = product.Name; //Assert Assert.AreEqual("Product2", result); } } public class ConcreteFactory1 : AbstractFactory { public override Product CreateProduct() { return new Product("Product1"); } } public class ConcreteFactory2 : AbstractFactory { public override Product CreateProduct() { return new Product("Product2"); } } public abstract class AbstractFactory { public abstract Product CreateProduct(); } public class Product { readonly string _name; internal Product(string name) { _name = name; } public string Name { get{return _name;} } } }