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