public void CreateWitThUsesBuildStrategyToCreateInstanceWithParametersTest() { var value = Guid.NewGuid(); var expected = new ReadOnlyModel(value); var build = Substitute.For<IBuildStrategy>(); var creator = Substitute.For<ITypeCreator>(); var creators = new List<ITypeCreator> {creator}.AsReadOnly(); build.TypeCreators.Returns(creators); creator.CanCreate(typeof(ReadOnlyModel), null, Arg.Any<LinkedList<object>>()).Returns(true); creator.CanPopulate(typeof(ReadOnlyModel), null, Arg.Any<LinkedList<object>>()).Returns(true); creator.Create(typeof(ReadOnlyModel), null, Arg.Any<LinkedList<object>>(), value).Returns(expected); creator.Populate(expected, Arg.Any<IExecuteStrategy>()).Returns(expected); try { Model.BuildStrategy = build; var actual = Model.CreateWith<ReadOnlyModel>(value); actual.Value.Should().Be(value); } finally { Model.BuildStrategy = Model.DefaultBuildStrategy; } }
public void CreateWithReturnsValueFromResolvedConstructorAndBuiltParametersTest() { var value = Guid.NewGuid(); var expected = new ReadOnlyModel(value); var valueGenerators = new List<IValueGenerator>(); var typeCreators = new List<ITypeCreator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); var resolver = Substitute.For<IConstructorResolver>(); var generator = Substitute.For<IValueGenerator>(); var typeCreator = Substitute.For<ITypeCreator>(); typeCreators.Add(typeCreator); valueGenerators.Add(generator); resolver.Resolve(typeof(ReadOnlyModel), Arg.Any<object[]>()) .Returns(typeof(ReadOnlyModel).GetConstructors()[0]); buildStrategy.ConstructorResolver.Returns(resolver); buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly()); buildStrategy.ValueGenerators.Returns(valueGenerators.AsReadOnly()); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); typeCreator.CanCreate(typeof(ReadOnlyModel), null, Arg.Any<LinkedList<object>>()).Returns(true); typeCreator.Create(typeof(ReadOnlyModel), null, Arg.Any<LinkedList<object>>(), value).Returns(expected); typeCreator.Populate(expected, target).Returns(expected); typeCreator.AutoPopulate.Returns(true); typeCreator.AutoDetectConstructor.Returns(true); generator.IsSupported(typeof(Guid), "value", Arg.Any<LinkedList<object>>()).Returns(true); generator.Generate(typeof(Guid), "value", Arg.Any<LinkedList<object>>()).Returns(value); var actual = (ReadOnlyModel)target.CreateWith(typeof(ReadOnlyModel)); actual.Should().Be(expected); actual.Value.Should().Be(value); }