वैकल्पिक रूप से, आप सभी रिकॉर्ड्स हटाने और फिर ऑटो-इंक्रिमेंट काउंटर को फिर से सेट करने के संयोजन के साथ छंटनी अनुकरण कर सकते हैं।
सबसे पहले, आपको नया डेटाबेस ऑपरेशन क्लास बनाना होगा जो तालिका के ऑटो-वृद्धि मूल्य को रीसेट करने में संभाल लेगा। जैसा कि ऊपर वर्णित
/**
* Resets all AUTO_INCREMENT counters on all tables in a dataset.
* @see PHPUnit_Extensions_Database_Operation_IDatabaseOperation
*/
class ResetAutoincrementOperation implements PHPUnit_Extensions_Database_Operation_IDatabaseOperation
{
/*
* @see PHPUnit_Extensions_Database_Operation_IDatabaseOperation::execute()
*/
public function execute(PHPUnit_Extensions_Database_DB_IDatabaseConnection $connection,
PHPUnit_Extensions_Database_DataSet_IDataSet $dataSet)
{
foreach ($dataSet->getReverseIterator() as $table) {
$query = "ALTER TABLE {$connection->quoteSchemaObject($table->getTableMetaData()->getTableName())}"
. " AUTO_INCREMENT = 1
";
try {
$connection->getConnection()->query($query);
} catch (PDOException $e) {
throw new PHPUnit_Extensions_Database_Operation_Exception('RESET_AUTOINCREMENT',
$query, array(), $table, $e->getMessage());
}
}
}
}
अब getSetUpOperation()
और getTearDownOperation()
तरीकों के ऊपर लिख।
class FooTest extends PHPUnit_Extensions_Database_TestCase
{
/**
* @see PHPUnit_Extensions_Database_TestCase::getTearDownOperation()
*/
protected function getTearDownOperation()
{
// Clean up after ourselves
return new PHPUnit_Extensions_Database_Operation_Composite(array(
PHPUnit_Extensions_Database_Operation_Factory::DELETE_ALL(), // 1. delete all records from table
new ResetAutoincrementOperation() // 2. reset auto increment value
));
}
/**
* @see PHPUnit_Extensions_Database_TestCase::getSetUpOperation()
*/
protected function getSetUpOperation()
{
return new PHPUnit_Extensions_Database_Operation_Composite(array(
PHPUnit_Extensions_Database_Operation_Factory::DELETE_ALL(), // 1. delete all records from table
new ResetAutoincrementOperation(), // 2. reset auto increment value
PHPUnit_Extensions_Database_Operation_Factory::INSERT() // 3. insert new records
));
}
}
MySQL 5.5.24 और PHPUnit 3.6.10
साथ मेरे लिए काम किया यह तब होता है, जब भी तालिका तालिका आप को छोटा कर रहे हैं को संदर्भित खाली है। बहुत यकीन है कि यह एक MySQL बग है, यहां पर टिप्पणियों के बावजूद: http://bugs.mysql.com/bug.php?id=54678 @ टावर समाधान दुखद रूप से एकमात्र विकल्प है। – jmc