プログラミング言語 Scala 10冊目

このエントリーをはてなブックマークに追加
106デフォルトの名無しさん
こんにちは。ここで質問させてください。
外部から提供されるクラスAがあり、それをこちらのクラスBが使用している状況です。
さて、クラスAはネットワークライブラリの一部なため、動作が複雑でテストに不便です。
テストのためdependency injectionの手法を使い、クラスAをダミークラスDummyAに置換したいと考えています。
まず継承を使おうかと考えたのですが、そもそも外部のクラスは継承させることができません。(1)
(1)
trait ALike { ... } // 必要な機能をまとめたトレイト
class A extends ALike ... // ←外部クラスだから無理
class DummyA extends ALike...

def task(a: ALike) = ...

そこで、あらゆるクラスを横断的に処理できる型クラスを導入してみようかと思ったのですが、
インターネットで調べてみたところ、*型クラスが実装されている型を引数に取る処理しかできない*(2)ような書かれかたがなされています。
(2)
implicit class HogeHoge extends TypedClass[A] {
def hogehoge(x: A) = ... // ここ。hogehoge(message: String)で受けて内部でAを使いたい
}

この場合どのように書けばよいのでしょうか?こういう用途では型クラスは使えないのでしょうか?
質問が分かりにくくて申し訳ありません。簡潔に書くと、
* importした外部のクラスと内部のダミークラスを交換し、クラスBのコンストラクタ経由でのDIを行いたい
* 具体的には副作用のある「ネットワーク上のホストをあるリストに追加する処理」をするクラスを「リストに追加したふりをしてくれる自前のクラス」に交換したい
よろしくお願いします。