1

我正在尝试使用名为 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);
        }
    }
4

2 回答 2

1

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

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

这将返回结构类型的默认值,在我相信的类型Guid的情况下为空。Guid如果要支持Guid类型,可以在Data.Random最终检查之前将其添加到方法中ValueType

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

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

于 2013-06-14T01:43:45.390 回答
1

看起来你应该使用:

FakeO.Distinct.Guid()
于 2013-07-23T20:09:50.547 回答