如何对POCO对象进行字符串处理

时间:2016-06-03 20:09:32

标签: c# unit-testing mocking poco

我有一个非常大的POCO对象集合,有几个子属性,我需要模拟...

在使用快速观看时,我看到了实体,因为我想要它......

我正在寻找的是一种扩展方法或者一种方法来对它进行拼接,这样我就可以进行单元测试并在那里进行模拟......有点:

var myPoco = new Poco {
                       //here goes whatever i get from my magic method
                      };

如何对给定对象的所有属性名称和值进行字符串处理,以便它可以分配?

编辑1:
我正在寻找类似的东西:

    public static string StringFy(this object obj, string prefix)
    {
        string result = "";
        obj.GetType().GetProperties().ToList().ForEach(i =>
        {
            result += prefix + "." + i.Name + " = ";
            if (i.PropertyType == typeof(string))
            {
                result += "\"" + i.GetValue(obj) + "\";\r\n";
            }
            else
            if (i.PropertyType == typeof(Guid))
            {
                result += "new Guid(\"" + i.GetValue(obj) + "\");\r\n";
            }
            else
            {
                var objAux = i.GetValue(obj);
                result += (objAux == null ? "null" : objAux) + ";\r\n";
            }
        });
        return result.Replace(" = True;", " = true;").Replace(" = False;", " = false;");
    }

1 个答案:

答案 0 :(得分:0)

您可以在类上创建一个索引器,它使用反射通过属性名称的字符串值设置属性。这是一个示例类:

using System.Reflection;

namespace ReflectionAndIndexers
{
    class ReflectionIndexer
    {
        public string StrProp1 { get; set; }
        public string StrProp2 { get; set; }
        public int IntProp1 { get; set; }
        public int IntProp2 { get; set; }

        public object this[string s]
        {
            set
            {
                PropertyInfo prop = this.GetType().GetProperty(s, BindingFlags.Public | BindingFlags.Instance);
                if(prop != null && prop.CanWrite)
                {
                    prop.SetValue(this, value, null);
                }
            }
        }
    }
}

然后测试它:

using System;

namespace ReflectionAndIndexers
{
    class Program
    {
        static void Main(string[] args)
        {
            var ri = new ReflectionIndexer();
            ri["StrProp1"] = "test1";
            ri["StrProp2"] = "test2";
            ri["IntProp1"] = 1;
            ri["IntProp2"] = 2;

            Console.WriteLine(ri.StrProp1);
            Console.WriteLine(ri.StrProp2);
            Console.WriteLine(ri.IntProp1);
            Console.WriteLine(ri.IntProp2);
            Console.ReadLine();
        }
    }
}

输出:

  

test1

     

test2

     

1

     

2