2012-01-14 6 views
0

メソッドのサブセットをオーバーライドし、残りのメソッドの実行時例外をスローする、特定の型のオブジェクトを作成する方法はありますか?Scala Mockオブジェクトの作成

スーパークラスの実装にアクセスする必要はありません。コンパイル時と実行時に同じ型を持つだけです。

答えて

6

これはまったくのもので、期待値を設定したメソッドは期待どおりのことを行い、他はすべてExpectationExceptionをスローします。

あなたのユースケースは何ですか?

+0

私は実装されていないすべてのメソッドの定型句コードを書こうとしません(dhgの答えに関するコメントを参照)。私はscalamockが十分であると思う。しかし、もし私が外部の図書館に行く必要がなければ、それはいいだろう。 – dsg

+0

PowerMockitoでは、誰かがMyClassのインスタンスを新規作成したときに、実際のインスタンスではなくmockMyClassを受け取るときに、パターン "whenNew(MyClass).thenReturn(mockMyClass)"を使用できます。 ScalaMockで同様のことをすることはできますか?私はこの問題のために一日中過ごしました。 –

3

Paulが言ったように、ScalaMockは良い方法です。

しかし、私はあなただけの基本的な継承記述していることを指摘したかった:あなたはMockOriginalClassに渡すことができますOriginalClassオブジェクトを期待していたし、それがエラーをスローしますあなたのコードで、その後

class OriginalClass { 
    def methodToRun() = { println("called OriginalClass.methodToRun") } 
    def methodNotToRun() = { println("called OriginalClass.methodNotToRun") } 
} 

class MockOriginalClass extends OriginalClass { 
    override def methodToRun() = super.methodToRun() 
    override def methodNotToRun() = throw new RuntimeException("you weren't supposed to run this!") 
} 

をあなたが間違ったことを呼んだとき。

+0

主な問題は、実行不能なすべてのメソッドに対して、定型文 '新しいRuntimeException(...)をスローする 'を追加したくないということです。それはあなたのためにそれらを埋める言語機能があった場合、スーパークールだろう。 – dsg

+0

私は、システムがどのメソッドが許可されているのか、そして明示的にそれを伝えていないのであれば、どのシステムが許可されていないのかを少し混乱させます。 「新しいRuntimeExceptionをスローする」のペーストはあまりにも多くの作業のようには思えません。 – dhg

+0

デフォルトでは、すべてのメソッドが許可されない(例外がスローされる)ことがあります。他のメソッドの実装を指定します。 – dsg

関連する問題