안녕하세요. 포스팅 잘보고 많이 참고해보고 있습니다.
Doohyun Nam
1

  1. ViewModel 에서 직접적으로 View 에 관여하고자 할때

여기에는 2가지 방법을 사용할 수 있습니다.
한가지는 reverse-Databinding 을 이용해서 뷰의 정보를 Observable 을 통해서 전달 받을 수 있는 것인데요 이 방법은 꽤나 손이 많이 가는 방법이 있고요. 다른 하나는 ViewUsecase 를 전달 받는 방식입니다.

저는 ViewUsecase 를 더 많이 사용하는 편입니다. 단 DI 시점에 따라서 ViewUsecase 에 View 를 직접 넣지 못하는 경우가 있기 때문에 Lazy 로 View 를 가져올 수 있는 인터페이스를 주입받아서 처리합니다.

2. 예상하신대로DI 툴을 쓰신다면 문제 없습니다. :D

3. ViewModel 의 UnitTest 경우, ViewUsecase 는 mocking 하여 테스트하고 ViewUsecase 만 별도로 UnitTest 코드를 작성하는 방식을 통해 작성합니다.