2016-04-20 6 views
-2

DAOクラスのCRUD操作をテストするためのJUnitテストケースを作成しています。かなり定型的なコードであり、その大部分はテストオブジェクトを作成し、ダミー値をインスタンス変数に割り当てることです。 Javaにオブジェクトを作成し、宣言された型に基づいてダミー値を割り当てるためのツールはありますか?JUnitテストケースに使用するダミーオブジェクトを作成するツールはありますか?

私はデータベースと対話してCRUD操作が成功したかどうかテストする必要があるので、JMockまたはMockitoを使用したくありません。

答えて

0

あなたのためのモックオブジェクトを作成し、いくつかのファジーデータを自動的に埋め込むツールはありません。

しかし、次のアプローチは、達成したいことに近いかもしれません。

擬似コード

Foo foo = new Foo(); 
foo.setIntValue(generateInt()); 
foo.setStringValue(generateString(20)); 
... 
// store the record in the database 
// retrieve the record from the database 
// check if the retrieved values are equal to the values in `foo` 

これはあなたが達成したいのか、あなたがQuickCheck

を探している場合がありますされている場合はQuickCheckの目標は、生成された値を使用して手動で選んだ値を交換することです。 QuickCheckベースのテストはドメインの法則をカバーしようとしますが、古典的なテストでは個別の値の妥当性しかテストできません。

基本的に、QuickCheckはデータのジェネレータに関するものです。 QuickCheckランナーメソッドは、ループ実装のための単なるファンシーです。 QuickCheckは、すべてのクラスのテストケースをテストする必要があり、すべての異なるテストシナリオのテストを作成することは現実的ではありません。

だからあなたは既にファジーデータで埋めFooのインスタンスを提供し、独自のGeneratorを作成することができます。 Junit Theoriesと組み合わせると、最初の要件に近い状態になります。

Theoriesをカスタム発電機で使用する例はhereです。この例は、同様のライブラリ(junit-quickcheck)用に書かれています。しかしそれはあなたのアイデアを実証するはずです。

editおおよそjunit-quickcheckの例に基づいています。次のスニペットのように見えるかもしれません。

import net.java.quickcheck.Generator; 
import static net.java.quickcheck.generator.PrimitiveGenerators.characters; 

public class MyCharacterGenerator implements Generator<String> { 

    private static final String LOWERCASE_CHARS = "abcdefghijklmnopqrstuvwxyz"; 
    private static final String UPPERCASE_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    private static final String NUMBERS = ""; 
    private static final String SPECIAL_CHARS = ".-\\;:[email protected][]^/|}{"; 
    private static final String ALL_MY_CHARS = LOWERCASE_CHARS 
      + UPPERCASE_CHARS + NUMBERS + SPECIAL_CHARS; 
    public static final int CAPACITY = 40; 

    Generator<Character> characterGenerator = characters(ALL_MY_CHARS); 

    public String generate() { 
     StringBuilder sb = new StringBuilder(CAPACITY); 
     for (int i = 0; i < CAPACITY; i++) { 
      sb.append(characterGenerator.next()); 
     } 
     return sb.toString(); 
    } 

    @Override 
    public String next() { 
     return generate(); 
    } 
} 

import net.java.quickcheck.Generator; 
import static org.testng.Assert.assertTrue; 
import org.testng.annotations.Test; 

public class MyCharacterGeneratorTest { 

    @Test 
    public void testStringGenerator() { 
     Generator<String> fuzzyString = new MyCharacterGenerator(); 

     for (int i = 0; i < 10; i++) { 
      String fuzzy = fuzzyString.next(); 
      System.out.println("fuzzy: " + fuzzy); 
      assertTrue(fuzzy.length() == MyCharacterGenerator.CAPACITY); 
      assertTrue(fuzzy.matches("[a-zA-Z0-9.\\-\\\\;:[email protected]\\[\\]^/|}{]*")); 
     } 
    } 
} 

出力

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running MyCharacterGeneratorTest 
fuzzy: ;d|xrS|[email protected]\.ly600{[email protected];de5:jN 
fuzzy: UCZBO|QJ/[email protected];b 
fuzzy: Jg}xD44_AFVqy\UKMehGPnV8xmKKy]dDXJsYIG9C 
fuzzy: k-eN-Sf^eK.bqqn4PR2[93{wyzgwr_F_ktBGkTP} 
fuzzy: 1UDChf3aWN0d/[email protected]}K[W2|P]}.ePzKvRJMJtB0/Z 
fuzzy: @J2}[email protected]]smpKWZ;[email protected]}[email protected] 
fuzzy: goL8o5qz-Ynga:i;WqGhKTo^1itHqENXM3OrO||4 
fuzzy: _\1ifR:ssplcdT9l\s{clV9ZozgCA^I67IF/|t0t 
fuzzy: /FwL9nCuRcemqR2SP3|XG9ui5Y21K:r0Ys1XIz/3 
fuzzy: 8U[Xk^e60JhGfLTMyGZ:Z;[email protected]\oJ7] 
+0

これは完璧です!応答する時間をとってくれてありがとう。 – Kiran

+0

@Kiranよろしくお願いします。私が助けることができてうれしい。 – SubOptimal

0

あなたが探しているものは、Mockitoのようなものだと思います。 Mockitoはオブジェクトを「FAKE」またはモックする機能と、そのモックされたオブジェクトのメソッドが呼び出されたときに返される機能を提供します。 Mockitoは、あなたが話していることを正確に行い、オブジェクトを模倣し、返されたものをあなたが望むすべての方法から返すことができます。

+0

私は、サービスをテストするためにMockitoを使用していますが、私はのDAOをテストするためのデータベースと対話します。テストは、CRUD操作が成功し、カラムを修正するために変数をマッピングする際にエラーがないことを保証することです。 – Kiran

+0

Springを使用してインスタンスを作成し、これをテストに挿入することができます。これは、それをテストするための強固な基盤を提供します。 Springの設定では、あなたが望むどんな値でも追加することができます。 – Dale

関連する問題