私が正しく理解していれば、模擬したコンストラクタを使ってクラスをテストしたいと思っています。これは、純粋な形式で実動コードをテストしていないため、テストするのには適していません。
しかし、すべてがルールに従っているわけではありませんか? :)あなたが主張するなら、JMockItはあなたにこれをさせるでしょう。コンストラクタだけを模擬して他のメソッドをテストすることができます。 Mockingコンストラクタは、JMockIt project siteによく記録されています。ここで
は、あなた自身を試すことができます簡単なデモです:
量産コード:
// 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
が出力されます。
お返事ありがとうございます。私はそれを試してみるだろう。 – userx
'あなたを正しく理解していれば、虚構のコンストラクタを使ってクラスをテストしたいと思っています。プロダクションコードを純粋な形でテストしているわけではないので、これはテストの良いアプローチではありません。私は完全に反対です。ユニットテスト(ホワイトボックステスト - これはJMockitが使用されるものです)は、純粋な形で、個々のユニットをテストすることです。複雑なコンストラクタではない特定のユニットをテストする場合、ユニットテストを実行しようとしているときに実行することは非常に悪いブラックボックステストです。 – searchengine27
しかし、$ init()メソッドの中でコンストラクタを嘲笑するときに、オブジェクトのフィールドをどのように設定しますか? – supertonsky