Autofixture: Tambahkan metode Create(Type) non-generik

Dibuat pada 19 Nov 2015  ·  2Komentar  ·  Sumber: AutoFixture/AutoFixture

Saya (ab) menggunakan Autofixture untuk menghasilkan contoh dokumentasi untuk Web API. Pesan (perintah dan kueri) yang akan dibuat oleh Autofixture untuk saya diserialkan ke JSON dan menjadi bagian dari dokumentasi. Ini bekerja dengan sangat baik, dan membutuhkan beberapa baris kode, dibandingkan dengan ratusan baris kode jelek yang dihasilkan oleh template VS untuk Web API di area /HelpPage (yuck).

Saat ini saya menggunakan kode berikut untuk mencapai ini:

``` c#
MethodInfo hanya-baca statis pribadi CreateMethodInfo =
GetMethod(() => SpecimenFactory.Create(Perlengkapan baru()))
.GetGenericMethodDefinition();

Buat objek statis publik (Tipe tipe)
{
var perlengkapan = Perlengkapan baru();
int indeks = 1;
fixture.Register(() => "contoh teks" + indeks++);

return CreateMethodInfo.MakeGenericMethod(type).Invoke(null, new object[] { fixture });

}

MethodInfo GetMethod statis pribadi (Ekspresi> panggilan metode) =>
((MethodCallExpression)metodeCall.Body).Metode;
```

Karena saya tidak tahu pesan persisnya pada waktu kompilasi, saya tidak dapat memanggil metode Fixture.Create<T>() Autofixture. Seperti yang ditunjukkan oleh kode di atas, cara saya menyelesaikannya saat ini adalah dengan menerapkan metode Create<T> generik ini menggunakan refleksi.

Apakah ada cara yang lebih sederhana untuk mencapai tujuan saya, dan jika tidak, dapatkah metode Create(Type) non-generik ditambahkan ke perpustakaan?

Komentar yang paling membantu

Apakah solusi ini akan berhasil?

c# var specimen = new SpecimenContext(fixture).Resolve(type);

Semua 2 komentar

Apakah solusi ini akan berhasil?

c# var specimen = new SpecimenContext(fixture).Resolve(type);

Dingin! Itu berhasil! Terima kasih.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat