반응형
WinRT에서 리플렉션을 사용하여 호출 된 비동기 개인 메서드를 기다리는 방법은 무엇입니까?
WinRT 앱에 대한 단위 테스트를 작성 중이며 다음을 사용하여 비 비동기 개인 메서드를 호출 할 수 있습니다.
TheObjectClass theObject = new TheObjectClass();
Type objType = typeof(TheObjectClass);
objType.GetTypeInfo()
.GetDeclaredMethod("ThePrivateMethod")
.Invoke(theObject, null);
그러나 문제의 private 메서드가 async인 경우 코드는 완료 될 때까지 기다리지 않고 계속 실행됩니다.
여기에 await기능을 어떻게 추가 합니까?
메서드가 반환 한 값을 사용해야합니다. 유형을 알고 있습니까? 예를 들어 항상 Task이면 다음을 사용할 수 있습니다.
await (Task) objType.GetTypeInfo()
.GetDeclaredMethod("ThePrivateMethod")
.Invoke(theObject, null);
반환 유형을 모르지만 기다릴 수 있다는 것을 알고 있다면 동적 유형을 사용할 수 있습니다.
await (dynamic) objType.GetTypeInfo()
.GetDeclaredMethod("ThePrivateMethod")
.Invoke(theObject, null);
내가 할 시도 하지만 처음에 단위 테스트에 반사에 의한 개인 메소드를 호출하는 것을 방지 할 수 있습니다. 공개 (또는 내부) API를 통해 간접적으로 테스트 할 수 있습니까? 일반적으로 바람직합니다.
Invoke로 변환 할 수있는 객체를 반환해야합니다 Task. 그냥 await.
개인 메서드가을 반환 void하면 사용자 지정이 필요합니다 SynchronizationContext. 메서드가 Task/를 반환하도록하는 것이 좋습니다 Task<T>.
반응형
'IT Share you' 카테고리의 다른 글
| JS .call () 메서드를 사용하는 이유는 무엇입니까? (0) | 2020.12.11 |
|---|---|
| 명령 줄에서 입력 숨기기 (0) | 2020.12.11 |
| iOS : URL에서 "새로 실행"앱을 디버그하는 방법 (0) | 2020.12.11 |
| 열 이름으로 Pandas 데이터 프레임 결합 (0) | 2020.12.11 |
| webpack-dev-server를 사용하여 노드 익스프레스 서버 실행 (0) | 2020.12.11 |