使用FakeO无法伪造guid属性

时间:2013-06-14 00:50:28

标签: c# fakeo

我正在尝试使用名为FakeO的库(https://github.com/rally25rs/FakeO) 它有效,除非有Guid属性。任何人都知道我可能做错了什么?

我得到的是:'System.Int32'类型的对象无法转换为'System.Guid'类型。

这是代码

 class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Get a single instance of an object");
            var gud = Guid.NewGuid();

            var obj1 = FakeO.Create.Fake<SampleClass>(
                                                      s => s.UniqueId = FakeO.Data.Random<Guid>(),
                                                      s => s.Id = FakeO.Number.Next(),
                                                      s => s.PhoneNumber = FakeO.Phone.Number(),
                                                      s => s.SomeString = FakeO.String.Random(50));
            Console.WriteLine(obj1.ToString() + "\n");

            IEnumerable<SampleClass> obj2 = FakeO.Create.Fake<SampleClass>(10, s => s.Id = FakeO.Number.Next(),
                                                      s => s.PhoneNumber = FakeO.Phone.Number(),
                                                      s => s.SomeString = FakeO.String.Random(50));

            foreach (var obj in obj2)
                Console.WriteLine(obj.ToString());

            Console.ReadKey();
        }
    }

    public class SampleClass
    {
        public int Id { get; set; }
        public string SomeString { get; set; }
        public string PhoneNumber { get; set; }
        public Guid UniqueId { get; set; }

        public override string ToString()
        {
            var output = "ID={0},SomeString ={1},PhoneNumber = {2}";
            return String.Format(output, Id, SomeString, PhoneNumber);
        }
    }

2 个答案:

答案 0 :(得分:1)

Guid是值类型,并且作者未正确处理不受支持的ValueType。对于Data.Random方法中的所有不支持的值类型,它返回0,这对于任何结构类型都不是很好。根据{{​​3}},Data.Random的最后一行应固定为

if(t.IsValueType)
{
    return Activator.CreateInstance(t);
}
return null;

这将返回struct类型的默认值,如果我认为Guid类型,则为Guid为空。如果您想支持Guid类型,可以在Data.Random的最终检查之前使用ValueType方法添加:{/ p>

if (t == typeof(Guid))
    return Guid.NewGuid();

我没有测试我的解决方案,但应该这样做。

答案 1 :(得分:1)

看起来你应该使用:

FakeO.Distinct.Guid()