これは少なくとも役に立たないかもしれませんが、とにかくそれを言います。
一度にテストしすぎているようです。BillingService->BillingValidation、次にBillingService-> BillingRepositoryなどをテストしてみませんか。このようにして、それぞれが機能することを証明する一連のテストを行います。 PublicApiレイヤーは、その下にあるすべてのものをすでにテストしているため、ApiServiceをモックするだけで済みます。したがって、再度テストする価値はありません。
通常、一度に1つのレイヤーのみをテストしますが、完全なシナリオがわからないため、私が説明していないものがある可能性があります。そのため、この場合、これらすべてを一緒にテストする必要がある場合は、 Ninjectなどのシンプルで軽量なDIフレームワークで。
このようにして、すべてのタイプをモックにバインドし、そこからPublicApiをインスタンス化できます。
ninjectを使用すると、次のようになります。
Kernel.Bind<UserRepository>.ToConst(YourMockUserRepositoryInstance);
Kernel.Bind<UserService>.ToConst(YourMockUserServiceInstance);
Kernel.Bind<BillingRepository>.ToConst(YourMockBillingRepositoryInstance);
Kernel.Bind<BillingValidation>.ToConst(YourMockBillingValidationInstance);
Kernel.Bind<BillingService>.ToConst(YourMockBillingServiceInstance);
Kernel.Bind<AccountingFacade>.ToConst(YourMockAccountingFacadeInstance);
Kernel.Bind<ApiService>.ToConst(YourMockApiServiceInstance);
Kernel.Bind<PublicApi>.ToSelf();
var publicApi = Kernel.Get<PublicApi>();
自問する必要がありますが、ここで何をテストしていますか?私が最初に述べたように、それが単なる相互作用である場合、それ以上の場合は、後者の選択について考えるかもしれません。いずれにせよ、私はそれがあなたにいくつかのオプションを与えることを願っています。