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

使用する必要があるようです:

FakeO.Distinct.Guid()
于 2013-07-23T20:09:50.547 に答える
1

Guidは値型であり、作者は unsupported をValueType適切に処理していませんでした。彼はメソッド内のサポートされていないすべての値型に対して 0 を返しますがData.Random、これはどの構造体型に対しても適切ではありません。この StackOverflow questionによると、最後の行は次のData.Randomように修正する必要があります

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

これは構造体型のデフォルト値を返します。これは、私が信じている型Guidの場合は空です。Guidタイプをサポートしたい場合は、メソッドの最終チェックの直前にGuid追加できます:Data.RandomValueType

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

私は自分のソリューションをテストしませんでしたが、テストする必要があります。

于 2013-06-14T01:43:45.390 に答える