// Author: Simon Gockner // Created: 2019-12-07 // Copyright(c) 2019 SimonG. All Rights Reserved. using System; using LightweightIocContainer; using LightweightIocContainer.Interfaces; using NUnit.Framework; namespace Test.LightweightIocContainer { [TestFixture] public class IocContainerInterfaceSegregationTest { #region TestClasses private interface IBar { void ThrowBar(); } private interface IFoo { void ThrowFoo(); } private class Foo : IFoo, IBar { public void ThrowFoo() { throw new Exception("Foo"); } public void ThrowBar() { throw new Exception("Bar"); } } #endregion TestClasses private IIocContainer _container; [SetUp] public void SetUp() { _container = new IocContainer(); } [TearDown] public void TearDown() { _container.Dispose(); } [Test] public void TestRegistrationOnCreate() { _container.Register().OnCreate(bar => bar.ThrowBar(), foo => foo.ThrowFoo()); Exception fooException = Assert.Throws(() => _container.Resolve()); Assert.AreEqual("Foo", fooException.Message); Exception barException = Assert.Throws(() => _container.Resolve()); Assert.AreEqual("Bar", barException.Message); } [Test] public void TestResolveTransient() { _container.Register(); IFoo foo = _container.Resolve(); IBar bar = _container.Resolve(); Assert.IsInstanceOf(foo); Assert.IsInstanceOf(bar); } [Test] public void TestResolveSingleton() { _container.Register(Lifestyle.Singleton); IFoo foo = _container.Resolve(); IBar bar = _container.Resolve(); Assert.IsInstanceOf(foo); Assert.IsInstanceOf(bar); Assert.AreEqual(foo, bar); Assert.AreSame(foo, bar); } } }