Ich portiere Tests eines nicht-generischen Repository zu einem generischen. Anstatt Repo<MyType>
zu verwenden, möchte ich die abstrakteren Methoden mit Repo<object>
oder so etwas testen.Wie erstellt man eine anonyme Klasse, damit sie an einen generischen Konstruktor übergeben werden kann?
Ich habe versucht, eine anonyme Instanz, zu verwenden, aber es hat nicht funktioniert:
[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
}
Ich habe versucht, die Klassenreferenz von dem Objekt zu schließen, ohne Erfolg zu:
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);
Wie kann ich das lösen? Ich beanspruche keine anonymen Objekte, ich dachte nur, es wäre ein pragmatischer Weg, um meine Tests laufen zu lassen, aber ich könnte es auch anders machen, wenn das kein gutes Design ist.
Statt 'object' als generische Typ, versuchen' dynamic' zu verwenden, Sie sollten in der Lage sein, auf Ihre Eigenschaft 'Name' zuzugreifen. –