- add unit test

pull/32/head
Simon Gockner 7 years ago
parent 97d71c5d10
commit c29aaac8de
  1. 8
      LightweightIocContainer.sln
  2. 189
      Test.LightweightIocContainer/InjectorContainerTest.cs
  3. 20
      Test.LightweightIocContainer/Test.LightweightIocContainer.csproj

@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15 # Visual Studio 15
VisualStudioVersion = 15.0.28307.572 VisualStudioVersion = 15.0.28307.572
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LightweightIocContainer", "LightweightIocContainer\LightweightIocContainer.csproj", "{17EDC847-0F69-462E-AD42-701BAEDF830F}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LightweightIocContainer", "LightweightIocContainer\LightweightIocContainer.csproj", "{17EDC847-0F69-462E-AD42-701BAEDF830F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.LightweightIocContainer", "Test.LightweightIocContainer\Test.LightweightIocContainer.csproj", "{F9A8A01E-D080-4998-9135-D342B2C4B4CD}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -15,6 +17,10 @@ Global
{17EDC847-0F69-462E-AD42-701BAEDF830F}.Debug|Any CPU.Build.0 = Debug|Any CPU {17EDC847-0F69-462E-AD42-701BAEDF830F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{17EDC847-0F69-462E-AD42-701BAEDF830F}.Release|Any CPU.ActiveCfg = Release|Any CPU {17EDC847-0F69-462E-AD42-701BAEDF830F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{17EDC847-0F69-462E-AD42-701BAEDF830F}.Release|Any CPU.Build.0 = Release|Any CPU {17EDC847-0F69-462E-AD42-701BAEDF830F}.Release|Any CPU.Build.0 = Release|Any CPU
{F9A8A01E-D080-4998-9135-D342B2C4B4CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F9A8A01E-D080-4998-9135-D342B2C4B4CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F9A8A01E-D080-4998-9135-D342B2C4B4CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F9A8A01E-D080-4998-9135-D342B2C4B4CD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

@ -0,0 +1,189 @@
using LightweightIocContainer;
using LightweightIocContainer.Exceptions;
using LightweightIocContainer.Interfaces;
using LightweightIocContainer.Registrations;
using Moq;
using NUnit.Framework;
namespace Test.LightweightIocContainer
{
[TestFixture]
public class InjectorContainerTest
{
#region TestClasses
//some of the test classes have to be public to allow the implementation of the factory
public interface ITest
{
}
public interface ITestFactory
{
ITest Create();
ITest Create(string name);
}
private class Test : ITest
{
}
private class TestConstructor : ITest
{
public TestConstructor(string name, Test test)
{
}
}
#endregion
[Test]
public void TestInstall()
{
Mock<IInjectorInstaller> installerMock = new Mock<IInjectorInstaller>();
IInjectorContainer injectorContainer = new InjectorContainer();
IInjectorContainer returnedContainer = injectorContainer.Install(installerMock.Object);
installerMock.Verify(m => m.Install(It.IsAny<IInjectorContainer>()), Times.Once);
Assert.AreEqual(injectorContainer, returnedContainer);
}
[Test]
public void TestInstallMultiple()
{
Mock<IInjectorInstaller> installer1Mock = new Mock<IInjectorInstaller>();
Mock<IInjectorInstaller> installer2Mock = new Mock<IInjectorInstaller>();
Mock<IInjectorInstaller> installer3Mock = new Mock<IInjectorInstaller>();
IInjectorContainer injectorContainer = new InjectorContainer();
IInjectorContainer returnedContainer = injectorContainer.Install(installer1Mock.Object, installer2Mock.Object, installer3Mock.Object);
installer1Mock.Verify(m => m.Install(It.IsAny<IInjectorContainer>()), Times.Once);
installer2Mock.Verify(m => m.Install(It.IsAny<IInjectorContainer>()), Times.Once);
installer3Mock.Verify(m => m.Install(It.IsAny<IInjectorContainer>()), Times.Once);
Assert.AreEqual(injectorContainer, returnedContainer);
}
[Test]
public void TestResolveNotRegistered()
{
IInjectorContainer injectorContainer = new InjectorContainer();
Assert.Throws<TypeNotRegisteredException>(() => injectorContainer.Resolve<ITest>());
}
[Test]
public void TestResolve()
{
IInjectorContainer injectorContainer = new InjectorContainer();
injectorContainer.Register(RegistrationFactory.Register<ITest, Test>());
ITest resolvedTest = injectorContainer.Resolve<ITest>();
Assert.IsInstanceOf<Test>(resolvedTest);
}
[Test]
public void TestResolveWithParams()
{
IInjectorContainer injectorContainer = new InjectorContainer();
injectorContainer.Register(RegistrationFactory.Register<ITest, TestConstructor>());
ITest resolvedTest = injectorContainer.Resolve<ITest>("Test", new Test());
Assert.IsInstanceOf<TestConstructor>(resolvedTest);
}
[Test]
public void TestResolveWithMissingParam()
{
IInjectorContainer injectorContainer = new InjectorContainer();
injectorContainer.Register(RegistrationFactory.Register<ITest, TestConstructor>());
injectorContainer.Register(RegistrationFactory.Register<Test, Test>()); //this registration is abnormal and should only be used in unit tests
ITest resolvedTest = injectorContainer.Resolve<ITest>("Test");
Assert.IsInstanceOf<TestConstructor>(resolvedTest);
}
[Test]
public void TestResolveReflection()
{
IInjectorContainer injectorContainer = new InjectorContainer();
injectorContainer.Register(RegistrationFactory.Register<ITest, Test>());
object resolvedTest = injectorContainer.Resolve(typeof(ITest), null);
Assert.IsInstanceOf<Test>(resolvedTest);
}
[Test]
public void TestResolveSingleton()
{
IInjectorContainer injectorContainer = new InjectorContainer();
injectorContainer.Register(RegistrationFactory.Register<ITest, Test>(Lifestyle.Singleton));
ITest resolvedTest = injectorContainer.Resolve<ITest>();
ITest secondResolvedTest = injectorContainer.Resolve<ITest>();
Assert.AreEqual(resolvedTest, secondResolvedTest);
}
[Test]
public void TestResolveTransient()
{
IInjectorContainer injectorContainer = new InjectorContainer();
injectorContainer.Register(RegistrationFactory.Register<ITest, Test>());
ITest resolvedTest = injectorContainer.Resolve<ITest>();
ITest secondResolvedTest = injectorContainer.Resolve<ITest>();
Assert.AreNotEqual(resolvedTest, secondResolvedTest);
}
[Test]
public void TestResolveFactory()
{
IInjectorContainer injectorContainer = new InjectorContainer();
injectorContainer.Register(RegistrationFactory.Register<ITest, Test>());
injectorContainer.Register(RegistrationFactory.RegisterFactory<ITestFactory>(injectorContainer));
ITestFactory testFactory = injectorContainer.Resolve<ITestFactory>();
Assert.IsInstanceOf<ITestFactory>(testFactory);
}
[Test]
public void TestResolveFromFactory()
{
IInjectorContainer injectorContainer = new InjectorContainer();
injectorContainer.Register(RegistrationFactory.Register<ITest, Test>());
injectorContainer.Register(RegistrationFactory.RegisterFactory<ITestFactory>(injectorContainer));
ITestFactory testFactory = injectorContainer.Resolve<ITestFactory>();
ITest createdTest = testFactory.Create();
Assert.IsInstanceOf<Test>(createdTest);
}
[Test]
public void TestResolveFromFactoryWithParams()
{
IInjectorContainer injectorContainer = new InjectorContainer();
injectorContainer.Register(RegistrationFactory.Register<ITest, TestConstructor>());
injectorContainer.Register(RegistrationFactory.Register<Test, Test>()); //this registration is abnormal and should only be used in unit tests
injectorContainer.Register(RegistrationFactory.RegisterFactory<ITestFactory>(injectorContainer));
ITestFactory testFactory = injectorContainer.Resolve<ITestFactory>();
ITest createdTest = testFactory.Create("Test");
Assert.IsInstanceOf<TestConstructor>(createdTest);
}
}
}

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Moq" Version="4.11.0" />
<PackageReference Include="nunit" Version="3.10.1" />
<PackageReference Include="NUnit3TestAdapter" Version="3.10.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LightweightIocContainer\LightweightIocContainer.csproj" />
</ItemGroup>
</Project>
Loading…
Cancel
Save