Один из вариантов - добавить уникальное ограничение на три столбца в вашей таблице, которые определяют уникальность. Затем попытка вставить повторяющуюся запись должна привести к исключению Java. Но это может привести к сбою всей партии. Если вы хотите другой вариант, вы можете изменить свой запрос следующим образом:
INSERT INTO mytable
SELECT ?, ?, ?
WHERE NOT EXISTS (SELECT 1 FROM mytable
WHERE id = ? AND col2 = ? AND col3 = ?);
К этому запросу вы привязываете значения дважды следующим образом:
preparedStatement.setInt(1, id);
preparedStatement.setString(2, col2);
preparedStatement.setString(3, col3);
preparedStatement.setInt(4, id);
preparedStatement.setString(5, col2);
preparedStatement.setString(6, col3);
Нос имеет "тестовую функцию" генератора материала как это. Вы пишете функцию генератора, которая приводит к каждой функции "тестового сценария", которую Вы хотите, чтобы она выполнила, наряду с ее args. Следуя Вашему предыдущему примеру, это могло проверить каждую из функций в отдельном тесте:
import unittest
import numpy
from somewhere import the_functions
def test_matrix_functions():
for function in the_functions:
yield check_matrix_function, function
def check_matrix_function(function)
matrix1 = numpy.ones((5,10))
matrix2 = numpy.identity(5)
output = function(matrix1, matrix2)
assert matrix1.shape == output.shape, \
"%s produces output of the wrong shape" % str(function)
Вы могли попытаться генерировать классы тестового сценария с типом ()
class UnderTest_MixIn(object):
def f1(self, i):
return i + 1
def f2(self, i):
return i + 2
SomeDynamicTestcase = type(
"SomeDynamicTestcase",
(UnderTest_MixIn, unittest.TestCase),
{"even_more_dynamic":"attributes .."}
)
# or even:
name = 'SomeDynamicTestcase'
globals()[name] = type(
name,
(UnderTest_MixIn, unittest.TestCase),
{"even_more_dynamic":"attributes .."}
)
Это должно быть создано, когда нос пытается импортировать Ваш test_module, таким образом, он должен работать.
Преимущество этого подхода состоит в том, что можно создать много комбинаций тестов динамично.