public void General_Property_Mapping()
        {
            #region Produce two mapping class text

            const string sourceText = @"
namespace Sample.Entities
{
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}
";

            const string targetText = @"
using MapperGenerator;
using Sample.Entities;
namespace Sample.Models
{
    [Mapping(typeof(Person))]
    public class PersonViewModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}
";

            #endregion

            var originCompilation = GeneratorTestHelper.CreateCompilation(sourceText, targetText);
            var(resultCompilation, generatorDiagnostics) =
                GeneratorTestHelper.RunGenerators(originCompilation, new Generators.MapperGenerator());

            // verify no errors or warnings are returned
            Assert.IsEmpty(generatorDiagnostics);
            Assert.IsEmpty(resultCompilation.GetDiagnostics());

            // compile and get an assembly along with our methods.
            var assembly             = GeneratorTestHelper.GetAssemblyFromCompilation(resultCompilation);
            var mapperType           = assembly.GetType("MapperGenerator.Mapper");
            var generalMappingMethod =
                mapperType?.GetMethod("MapToPersonViewModel");                       // this one is added via the generator
            var extensionMappingMethod = mapperType?.GetMethod("ToPersonViewModel"); // this is in our source

            Assert.NotNull(generalMappingMethod);
            Assert.NotNull(extensionMappingMethod);

            //var mapper = Activator.CreateInstance(mapperType);
            var personType = assembly.GetType("Sample.Entities.Person");
            var person     = Activator.CreateInstance(personType);
            personType.GetProperty("Id")?.SetValue(person, 1);
            personType.GetProperty("Name")?.SetValue(person, "Roberson");


            var result = generalMappingMethod.Invoke(null, new[] { person });

            var expectedType = assembly.GetType("Sample.Models.PersonViewModel");
            Assert.AreEqual(expectedType, result.GetType());

            var actualId   = expectedType.GetProperty("Id").GetValue(result);
            var actualName = expectedType.GetProperty("Name").GetValue(result);

            Assert.AreEqual(1, actualId);
            Assert.AreEqual("Roberson", actualName);
        }