C# 无法使用FakeO伪造guid属性

C# 无法使用FakeO伪造guid属性,c#,fakeo,C#,Fakeo,我正在尝试使用名为FakeO()的库 它工作正常,除非有Guid属性。有人知道我可能做错了什么吗 我得到的例外是:类型为“System.Int32”的对象无法转换为类型为“System.Guid” 这是密码 class Program { static void Main(string[] args) { Console.WriteLine("Get a single instance of an object");

我正在尝试使用名为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);
        }
    }
类程序
{
静态void Main(字符串[]参数)
{
WriteLine(“获取对象的单个实例”);
var gud=Guid.NewGuid();
var obj1=FakeO.Create.false(
s=>s.UniqueId=FakeO.Data.Random(),
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 obj2=FakeO.Create.Fake(10,s=>s.Id=FakeO.Number.Next(),
s=>s.PhoneNumber=FakeO.Phone.Number(),
s=>s.SomeString=FakeO.String.Random(50));
foreach(obj2中的var obj)
Console.WriteLine(obj.ToString());
Console.ReadKey();
}
}
公共类样本类
{
公共int Id{get;set;}
公共字符串SomeString{get;set;}
公共字符串PhoneNumber{get;set;}
公共Guid唯一ID{get;set;}
公共重写字符串ToString()
{
var output=“ID={0},SomeString={1},PhoneNumber={2}”;
返回String.Format(输出、Id、SomeString、PhoneNumber);
}
}

Guid
是值类型,作者没有正确处理不支持的
ValueType
。对于方法中所有不受支持的值类型,他都返回0,这对于任何结构类型都不太好。根据,最后一行
数据。Random
应固定为

if(t.IsValueType)
{
    return Activator.CreateInstance(t);
}
return null;
这将返回struct type的默认值,对于我认为的
Guid
类型,它是空的
Guid
。如果要支持
Guid
类型,可以在最后检查
ValueType
之前将其添加到
Data.Random
方法中:

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

我没有测试我的解决方案,但它应该测试。

看起来您应该使用:

FakeO.Distinct.Guid()

github页面说它支持开箱即用