私は現在、Scalaプロジェクトに取り組んでおり、シングルトンオブジェクトを広範囲に使用するコードのテストが困難になっています。シングルトンをクラスに置き換える際に潜在的な問題はありますか?
私はこのようなシングルトンいます
object SomeSingleton {
def someFunction(s: String): String = s + "b"
}
そしてどこかに私はそれがテストに私が欲しいの方法での使用だ持っているプロジェクトで:
val s = SomeSingleton.someFunction("a")
私は新しい機能を開発し、私はSomeSingleton.someFunction
をしたいです実際のメソッドコールを使わずにテストで特定の値を返すと、私はPowermockを使ってJavaでこれを行いましたが、Scalaでこれを行う方法を見つけることに失敗しました。 私はまだこれを行うことができますどのようにアイデアを持っているが、それはこれに元のコードを変更すること意味します
object SomeSingleton extends SomeSingletonClass{}
class SomeSingletonClass {
// Whole logic from SomeSingleton moves here
def someFunction(s: String): String = s + "b"
}
は今、私はSomeSingletonClass
でSomeSingleton
の使用を置き換えることができますし、それを適切に模擬します。だからここに私の懸念がありますが、プロジェクトは小さくはない、それは100%テストの対象ではなく、私はScalaにとって比較的新しいので、私はそれがもたらす可能性のある悪影響があるかどうかはわかりません。それは実行可能な解決策ですか?私はこれのために、私のレガシーコードがいくつかのランダムな場所で壊れないようにします。
これは結構です... – OlivierBlanvillain