Я не знаю инструмента, который создаст для вас макет объекта и автоматически заполнит его некоторыми нечеткими данными.
Но, возможно, следующий подход будет близок к тому, чего вы хотите достичь.
псевдокод
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 относится к генераторам данных. Метод RunCheck QuickCheck - это просто фантазия для реализации цикла. QuickCheck может помочь в сценариях, где должны тестироваться целые классы тестовых примеров, и не представляется возможным писать тесты для всех различных тестовых сценариев.
Таким образом, вы можете создать свой собственный Generator
, который обеспечивает экземпляры Foo
уже заполнены с нечеткими данными. В сочетании с Junit Theories вы будете близки к своему первоначальному требованию.
Пример использования Theories
с помощью специального генератора вы можете найти here. Пример был написан для аналогичной библиотеки (junit-quickcheck). Но это должно продемонстрировать вашу идею.
Редактировать Примерно на примере 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
@ Киран. Добро пожаловать. Рад, что я мог бы помочь. – SubOptimal