あなたのためのモックオブジェクトを作成し、いくつかのファジーデータを自動的に埋め込むツールはありません。
しかし、次のアプローチは、達成したいことに近いかもしれません。
擬似コード
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]
これは完璧です!応答する時間をとってくれてありがとう。 – Kiran
@Kiranよろしくお願いします。私が助けることができてうれしい。 – SubOptimal