Wie erwartet man eine asynchrone private Methode, die durch Reflektion in WinRT aufgerufen wird?
Schreibe ich unit-tests für eine WinRT app, und ich bin in der Lage zu berufen, nicht async private Methoden:
TheObjectClass theObject = new TheObjectClass();
Type objType = typeof(TheObjectClass);
objType.GetTypeInfo()
.GetDeclaredMethod("ThePrivateMethod")
.Invoke(theObject, null);
Jedoch, wenn die private Methode in Frage async
wird, der code mit der Ausführung fortfahren, ohne zu warten, für Sie zu beenden.
Wie füge ich await
Funktionalität?
Kommentar zu dem Problem
Da dies eine WinRT app, habe ich das Gefühl, dass die Reflexion/Aufruf der privaten Mitglieder ist nicht zulässig. Ich kann nicht finden die offizielle Dokumentation auf der google jetzt, am nächsten ist: blogs.microsoft.co.il/blogs/sasha/Archiv/2011/09/17/... EDIT: Dies sind die unit-tests, obwohl, so vielleicht es ist ein nicht-Thema. 🙂
@Chris Sinclair Tatsächlich, den code habe ich oben arbeitet perfekt für den privaten Methoden. Mein Problem ist speziell mit asynchronen lieben. Das Problem würde dann öffentliche Methoden aufgerufen, über Reflexion ebenso.
InformationsquelleAutor der Frage jokeefe | 2013-02-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie den Wert verwenden, der von der Methode zurückgegeben. Kennen Sie den Typ? Zum Beispiel, wenn es ist immer ein
Task
, den Sie verwenden könnten:Wenn Sie nicht wissen, der return-Typ, aber wissen wird es sein, die erwartbaren, Sie könnte verwenden Sie die dynamische Eingabe:
Ich würde versuchen zu vermeiden, rufen eine private Methode per reflection in Ihre unit-tests in Erster Linie obwohl. Können testen Sie es indirekt über die öffentlichen (oder interne) - API? Das ist in der Regel vorzuziehen.
InformationsquelleAutor der Antwort Jon Skeet
Invoke
sollte ein Objekt zurückgeben, Cabrio zuTask
. Nurawait
.Wenn die private Methode gibt
void
ist, dann müssen Sie eine benutzerdefinierteSynchronizationContext
, was unschön ist. Es ist besser, Ihre Methoden zurückTask
/Task<T>
.InformationsquelleAutor der Antwort Stephen Cleary