メソッドパラメータとしてまだ実装されていないインターフェイスを使用するクラスでJUnitテストを実行する方法がわかりません。インターフェイスの実装がわからないので、実装できません。
たとえば、私はこのインターフェースを持っています
public interface Command{
public void execute();
....
}
インターフェイスをメソッドパラメータとして使用するクラス。
public class Manager{
List<Command> listCommands = new List<Command>();
public void storeCommand(Command command){
listCommands.add(command);
}
}
私がオンラインで読んだ解決策の1つは、mockitoを使用してインターフェイスの実装をモックすることですが、よくわかりません。
ありがとう!
まず、ユニットテストのコンテキストでのモックの概念に慣れてください。この質問をすることで、自分がそうではないことを示します。
次に、固執するモックフレームワークを選択します。Mockitoは良いもので、おそらく最も人気のあるものです。
最後に、このフレームワークで活用できるすべてのモック機能については説明しません(できません)が、これは、タイプ(インターフェイスまたはクラス)をモックする方法、およびモックインスタンスを構成して作成する方法の一例です。それはあなたがそれを振る舞わせたいように振る舞います:
import static org.mockito.Mockito.*;
class YourTestFixture {
@Test
public void yourTest() {
//create mock
Command commandMock = mock(Command.class);
//configure execute() method's return value
when(commandMock.execute()).thenReturn("your expected value");
//your assertions..
}
}
これで、.execute()
その特定のインスタンス(commandMock
)を呼び出すたびに、一貫して"your expected value"
。が返されます。
例外をスローさせたり、null
..を返したり、やりたいことを何でもすることができますが、返されるオブジェクト/値は、返されると宣言されているメソッドのタイプ(またはサブタイプ)である必要があります。
あなたの例では:
public class Manager{
List<Command> listCommands = new List<Command>();
public void storeCommand(Command command) {
listCommands.add(command);
}
}
command
パラメータでメソッド呼び出しを使用していません。したがって、上記で説明したように、インターフェイスを簡単にモックすることができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加