13

複雑なコンストラクター (多くのパラメーターを持つ) を持つクラスの単体テストを行っています。コンストラクターは次のような 3 つの引数を取ります。

public BehavioralDischargeCarePlan_Bus(Webform webForm,String dataEntryModel, String     obsBatId) {

    super(webForm, dataEntryModel, obsBatId);
.....

次に、コンストラクターは、さらに複雑になるスーパー コンストラクターを呼び出します。JMockit を使用して、クラスのインスタンスを作成し、実際にコンストラクターを呼び出さずにメソッドをテストするにはどうすればよいですか? 私はJMockitを初めて使用します。どんな助けでも大歓迎です。

ありがとう !

4

1 に答える 1

20

私があなたを正しく理解していれば、あなたはモックされたコンストラクターでクラスをテストしたいと考えています。本番コードを最も純粋な形でテストしていないため、これはテストの良いアプローチではありません。

とはいえ、すべてがルール通りに進むわけではありませんよね?:) したがって、あなたが主張するなら、JMockIt はあなたにそれをさせてくれます。コンストラクターだけをモックアウトして、他のメソッドをテストできます。モックコンストラクターについては、JMockIt プロジェクト サイトで詳しく説明されています。

以下は、自分で試すことができる簡単なデモンストレーションです。

生産コード:

// src/main/java/pkg/SomeClass.java
public class SomeClass {
    public static void main(String[] args) {
        new SomeClass("a", 2);
    }

    public SomeClass(String a, Integer b) {
        System.out.println("Production constructor called");
    }
}

モックコード:

// src/test/java/pkg/SomeMock.java
import mockit.Mock;
import mockit.MockUp;

public class SomeMock extends MockUp<SomeClass> {
    @Mock
    public void $init(String a, Integer b) {
        System.out.println("Mock constructor called");
    }
}

テストコード:

// srce/test/java/pkg/SomeTest.java
import org.junit.Test;

public class SomeTest {

    @Test
    public void test() {
        new SomeMock();
        new SomeClass("a", 2);
    }

}

本番コードをProduction constructor called実行すると が出力されますが、テスト中に実行すると が出力されますMock constructor called

于 2013-09-19T16:43:19.803 に答える