Skip to content

Commit

Permalink
feat: add TestBed
Browse files Browse the repository at this point in the history
BREAKING CHANGE: The new TestBed system replaces DependencyScope and DependencyInjector's static methods. They have been removed.
  • Loading branch information
jonisavo committed Aug 20, 2022
1 parent 018923d commit b25a6ad
Show file tree
Hide file tree
Showing 34 changed files with 865 additions and 472 deletions.
7 changes: 4 additions & 3 deletions Assets/UIComponents.Benchmarks/BenchmarkUtils.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
using Unity.PerformanceTesting;
using UIComponents.DependencyInjection;
using Unity.PerformanceTesting;

namespace UIComponents.Benchmarks
{
public static class BenchmarkUtils
{
public const string Version = "0.18.0.0";
public const string Version = "0.19.0.0";

private static SampleGroup[] GetProfilerMarkers()
{
Expand All @@ -23,7 +24,7 @@ public static void MeasureComponentInitWithColdCache<TComponent>() where TCompon
.SetUp(() =>
{
UIComponent.ClearCache<TComponent>();
DependencyInjector.Container.Clear();
DiContext.Current.Container.Clear();
})
.SampleGroup(new SampleGroup("Cold Cache Time"))
.ProfilerMarkers(GetProfilerMarkers())
Expand Down
23 changes: 13 additions & 10 deletions Assets/UIComponents.Tests/AssetPathAttributeTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Linq;
using NSubstitute;
using NUnit.Framework;
using UIComponents.Testing;
using UIComponents.Tests.Utilities;

namespace UIComponents.Tests
Expand All @@ -15,27 +16,29 @@ private class UIComponentWithAssetPaths : UIComponent {}
[AssetPath("Path3")]
[AssetPath("Path4")]
private class UIComponentSubclassWithAssetPaths : UIComponentWithAssetPaths {}

private TestBed _testBed;
private IAssetResolver _mockResolver;

private IAssetResolver _resolver;

[OneTimeSetUp]
public void OneTimeSetUp()
[SetUp]
public void SetUp()
{
_resolver = MockUtilities.CreateMockResolver();
DependencyInjector.SetDependency<UIComponentWithAssetPaths, IAssetResolver>(_resolver);
_mockResolver = MockUtilities.CreateMockResolver();
_testBed = TestBed.Create()
.WithSingleton(_mockResolver)
.Build();
}

[TearDown]
public void TearDown()
{
_resolver.ClearReceivedCalls();
DependencyInjector.ResetProvidedInstance<UIComponentWithAssetPaths, IAssetResolver>();
_mockResolver.ClearReceivedCalls();
}

[Test]
public void Specified_Asset_Paths_Are_Stored()
{
var component = new UIComponentWithAssetPaths();
var component = _testBed.CreateComponent<UIComponentWithAssetPaths>();

var assetPaths = component.GetAssetPaths().ToList();

Expand All @@ -48,7 +51,7 @@ public void Specified_Asset_Paths_Are_Stored()
[Test]
public void Asset_Path_Are_Inherited_From_Parent_Classes()
{
var component = new UIComponentSubclassWithAssetPaths();
var component = _testBed.CreateComponent<UIComponentSubclassWithAssetPaths>();

var assetPaths = component.GetAssetPaths().ToList();

Expand Down
69 changes: 0 additions & 69 deletions Assets/UIComponents.Tests/DependencyInjectorStaticTests.cs

This file was deleted.

27 changes: 14 additions & 13 deletions Assets/UIComponents.Tests/DependencyInjectorTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using NUnit.Framework;
using UIComponents.DependencyInjection;

namespace UIComponents.Tests
{
Expand All @@ -20,7 +21,7 @@ public void Can_Be_Created_Using_DependencyAttributes()
new DependencyAttribute(typeof(IDependency), typeof(DependencyOne))
};

var injector = new DependencyInjector(dependencyAttributes);
var injector = new DependencyInjector(dependencyAttributes, DiContext.Current.Container);

Assert.That(injector.Provide<IDependency>(), Is.InstanceOf<DependencyOne>());
}
Expand All @@ -31,15 +32,15 @@ public class Provide
[Test]
public void Returns_Desired_Dependency()
{
var injector = new DependencyInjector();
var injector = new DependencyInjector(DiContext.Current.Container);
injector.SetDependency<IDependency>(new DependencyOne());
Assert.That(injector.Provide<IDependency>(), Is.InstanceOf<DependencyOne>());
}

[Test]
public void Throws_If_No_Provider_Exists()
{
var injector = new DependencyInjector();
var injector = new DependencyInjector(DiContext.Current.Container);

var exception = Assert.Throws<MissingProviderException>(
() => injector.Provide<IDependency>()
Expand All @@ -55,7 +56,7 @@ public class TryProvide
[Test]
public void Returns_If_Dependency_Could_Be_Provided()
{
var injector = new DependencyInjector();
var injector = new DependencyInjector(DiContext.Current.Container);

Assert.That(injector.TryProvide<IDependency>(out _), Is.False);

Expand All @@ -70,7 +71,7 @@ public void Returns_If_Dependency_Could_Be_Provided()
[Test]
public void Yields_Null_If_Dependency_Can_Not_Be_Provided()
{
var injector = new DependencyInjector();
var injector = new DependencyInjector(DiContext.Current.Container);

injector.TryProvide<IDependency>(out var instance);

Expand All @@ -84,7 +85,7 @@ public class SetDependency
[Test]
public void Switches_The_Dependency()
{
var injector = new DependencyInjector();
var injector = new DependencyInjector(DiContext.Current.Container);

injector.SetDependency<IDependency>(new DependencyOne());
injector.SetDependency<IDependency>(new DependencyTwo());
Expand All @@ -95,7 +96,7 @@ public void Switches_The_Dependency()
[Test]
public void Throws_Exception_If_Null_Is_Given_As_Parameter()
{
var injector = new DependencyInjector();
var injector = new DependencyInjector(DiContext.Current.Container);

Assert.Throws<ArgumentNullException>(
() => injector.SetDependency<IDependency>(null)
Expand All @@ -109,7 +110,7 @@ public class ClearDependency
[Test]
public void Removes_Dependency_Instance()
{
var injector = new DependencyInjector();
var injector = new DependencyInjector(DiContext.Current.Container);

injector.SetDependency<IDependency>(new DependencyOne());

Expand All @@ -121,7 +122,7 @@ public void Removes_Dependency_Instance()
[Test]
public void Does_Not_Throw_If_Dependency_Does_Not_Exist()
{
var injector = new DependencyInjector();
var injector = new DependencyInjector(DiContext.Current.Container);

Assert.DoesNotThrow(() => injector.ClearDependency<IDependency>());
}
Expand All @@ -133,13 +134,13 @@ public class ResetProvidedInstance
[SetUp]
public void SetUp()
{
DependencyInjector.Container.Clear();
DiContext.Current.Container.Clear();
}

[Test]
public void Throws_If_No_Default_Dependency_Exists()
{
var injector = new DependencyInjector();
var injector = new DependencyInjector(DiContext.Current.Container);

Assert.Throws<InvalidOperationException>(
() => injector.ResetProvidedInstance<IDependency>()
Expand All @@ -157,7 +158,7 @@ public void Throws_If_No_Default_Dependency_Exists()
[Test]
public void Restores_Singleton_Instance()
{
var injector = new DependencyInjector();
var injector = new DependencyInjector(DiContext.Current.Container);

var singletonInstance = new DependencyOne();

Expand All @@ -171,7 +172,7 @@ public void Restores_Singleton_Instance()
[Test]
public void Creates_New_Transient_Instance()
{
var injector = new DependencyInjector();
var injector = new DependencyInjector(DiContext.Current.Container);
var transientInstance = new DependencyOne();

injector.SetDependency<IDependency>(transientInstance, Scope.Transient);
Expand Down
49 changes: 0 additions & 49 deletions Assets/UIComponents.Tests/DependencyScopeTests.cs

This file was deleted.

3 changes: 0 additions & 3 deletions Assets/UIComponents.Tests/DependencyScopeTests.cs.meta

This file was deleted.

1 change: 1 addition & 0 deletions Assets/UIComponents.Tests/DependencyTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using NUnit.Framework;
using UIComponents.DependencyInjection;

namespace UIComponents.Tests
{
Expand Down
Loading

0 comments on commit b25a6ad

Please sign in to comment.