public void CreateWithThrowsExceptionWhenGeneratingValueFailsTest()
{
var person = new Person();
var generators = new List<IValueGenerator>();
var creators = new List<ITypeCreator>();
var valueGenerator = Substitute.For<IValueGenerator>();
var typeCreator = Substitute.For<ITypeCreator>();
var buildStrategy = Substitute.For<IBuildStrategy>();
generators.Add(valueGenerator);
creators.Add(typeCreator);
typeCreator.CanCreate(typeof(Person), null, Arg.Any<LinkedList<object>>()).Returns(true);
typeCreator.Create(typeof(Person), null, null, null).Returns(person);
valueGenerator.IsSupported(Arg.Any<Type>(), Arg.Any<string>(), Arg.Any<LinkedList<object>>()).Returns(true);
valueGenerator.Generate(Arg.Any<Type>(), Arg.Any<string>(), Arg.Any<LinkedList<object>>())
.Throws(new InvalidOperationException());
buildStrategy.TypeCreators.Returns(creators.AsReadOnly());
buildStrategy.ValueGenerators.Returns(generators.AsReadOnly());
var target = new DefaultExecuteStrategy();
target.Initialize(buildStrategy, buildStrategy.GetBuildLog());
Action action = () => target.CreateWith(typeof(Person));
var exception =
action.ShouldThrow<BuildException>().Where(x => x.Message != null).Where(x => x.BuildLog != null).Which;
_output.WriteLine(exception.Message);
}