私は非汎用リポジトリのテストを一般的なものに移植しています。 Repo<MyType>
を使用する代わりに、より抽象的なメソッドをRepo<object>
などでテストしたいと考えています。ジェネリックコンストラクタに渡すことができるように匿名クラスを作成する方法は?
私は匿名インスタンスを使用しようとしましたが、それはうまくいきませんでした:
[Test]
public void AddToRepoIncrementsByOne()
{
IFile file = new FileFake();
IByteSerializer<object> serializer = new SerializerObjectFake();
repo = new WriteableFileRepository<object>(file, serializer);
var obj = new { Name = "test" };
repo.Add(obj);
Assert.True(repo.Items.Count() == 1);
Assert.AreEqual(repo.Items.Single().Name, obj.Nome);
//----------------------------------^^^^
//-------------------compiler error here
}
私はあまりにも成功せず、オブジェクトからクラス参照を推測しようとした:
var obj = new { Nome = "teste" };
Type T = obj.GetType();
IArquivo arquivo = new ArquivoFake();
IByteSerializer<T> serializer = new SerializerObjectFake();
//--------------^
repo = new RepositórioArquivoEscrita<T>(arquivo, serializer);
これをどうすれば解決できますか?私は匿名のオブジェクトを使用することを要求していない、私はちょうどそれが私のテストを実行させるための実用的な方法だろうと思ったが、これは良い設計でない場合は確かに他の方法を行うことができます。
代わりに 'のジェネリック型としてobject'、' dynamic'を使用しよう:今、すべてを行う必要がある
:型推論活用することで、コンパイラがあなたのために仕事をさせあなたはあなたのプロパティ 'Name'にアクセスできるはずです。 –