2

私はインタープリターを開発しており、モデルを解釈する「実行」メソッドの内部テストを行いたいと考えています。実行メソッドには入力も出力もないため、メソッドをテストする唯一の方法 (少なくとも私が知っていることから) は、内部メソッド呼び出しをモックして、それらが正しい順序で実行されることを確認することです。

現在、次のクラスがあります。

  1. ExecutableInstance- 実行可能なモデル クラス。
  2. ExecutableInstanceFactory- 実行可能なインスタンスを作成するシングルトン クラス (列挙型として実装)。指定されたパラメーターに応じて異なるメソッドを使用します。
  3. ModelAnalyzer- モデルを分析するためのメソッドを含むシングルトン クラス

インタープリターはクラスのexecute()メソッドを呼び出し、次に を呼び出して、モデル内の内部実行可能インスタンスを理解します。次に、 を使用して新しい を作成し、モデルの定義方法に応じてメソッドを呼び出します。ExecutableInstanceModelAnalyzerExecutableInstanceExecutableInstanceFactoryexecute()

私の考えは、クラスをモックして、実行順序をテストできるExecutableInstanceFactoryモックを返すことです。ExecutableInstaceしかし、これは、 を に注入する必要があることを意味しExecutableInstanceFactoryますExecutableInstance。これはシングルトンなので、パラメーターとして渡すのはばかげています。DIにGoogleのGuiceを使用することを考えました...しかし、これをやろうとして立ち往生しています。

私の方向は正しいですか?もしそうなら、これはどのように実装されるべきですか?

4

2 に答える 2

1

この実行メソッドからいくつかの小さなメソッドを作成します。たとえば、実行メソッドに何かを返す解析用のメソッドと、返されたデータを使用して何かを実行し、他のデータを返す別のメソッドなどです。その場合、Execute メソッドをテストする必要はなく、小さいメソッドのみをテストする必要があります。これにより、バグの検出も容易になります。

于 2013-10-10T05:48:16.237 に答える
1

execute メソッドには入力も出力もありません

そのため、クラスのコラボレーターで動作を検証する必要があります (モックを使用)。

これはシングルトンなので、パラメーターとして渡すのはばかげています。

テストに問題があるという事実は、設計に欠陥があることを示しています。シングルトンを取り除き、コラボレーターを注入します。

于 2013-10-10T10:11:38.820 に答える