0
0
Testing Fundamentalstesting~10 mins

Database migration testing in Testing Fundamentals - Test Execution Trace

Choose your learning style9 modes available
Test Overview

This test verifies that data is correctly migrated from the old database schema to the new schema without loss or corruption. It checks that all expected tables and records exist after migration.

Test Code - unittest
Testing Fundamentals
import unittest
import sqlite3

class TestDatabaseMigration(unittest.TestCase):
    def setUp(self):
        # Connect to old and new databases
        self.old_db = sqlite3.connect(':memory:')
        self.new_db = sqlite3.connect(':memory:')
        self.create_old_schema()
        self.create_new_schema()
        self.insert_old_data()
        self.perform_migration()

    def create_old_schema(self):
        cursor = self.old_db.cursor()
        cursor.execute('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')
        self.old_db.commit()

    def create_new_schema(self):
        cursor = self.new_db.cursor()
        cursor.execute('CREATE TABLE users (user_id INTEGER PRIMARY KEY, full_name TEXT, age INTEGER)')
        self.new_db.commit()

    def insert_old_data(self):
        cursor = self.old_db.cursor()
        cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 30))
        cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Bob', 25))
        self.old_db.commit()

    def perform_migration(self):
        old_cursor = self.old_db.cursor()
        new_cursor = self.new_db.cursor()
        old_cursor.execute('SELECT id, name, age FROM users')
        rows = old_cursor.fetchall()
        for row in rows:
            new_cursor.execute('INSERT INTO users (user_id, full_name, age) VALUES (?, ?, ?)', row)
        self.new_db.commit()

    def test_data_migrated_correctly(self):
        new_cursor = self.new_db.cursor()
        new_cursor.execute('SELECT user_id, full_name, age FROM users ORDER BY user_id')
        migrated_rows = new_cursor.fetchall()
        expected = [(1, 'Alice', 30), (2, 'Bob', 25)]
        self.assertEqual(migrated_rows, expected)

    def tearDown(self):
        self.old_db.close()
        self.new_db.close()

if __name__ == '__main__':
    unittest.main()
Execution Trace - 5 Steps
StepActionSystem StateAssertionResult
1Test starts and sets up in-memory old and new databasesTwo empty in-memory SQLite databases are created with old and new schemas-PASS
2Insert sample data into old database's users tableOld database users table contains two records: Alice (30), Bob (25)-PASS
3Perform migration by copying data from old to new database with new schemaNew database users table populated with migrated records matching old data-PASS
4Query new database users table and compare data to expected recordsNew database users table has records: (1, 'Alice', 30), (2, 'Bob', 25)Assert that migrated data equals expected data [(1, 'Alice', 30), (2, 'Bob', 25)]PASS
5Close database connections and end testDatabases closed, test ends cleanly-PASS
Failure Scenario
Failing Condition: Data is missing or incorrectly migrated in the new database
Execution Trace Quiz - 3 Questions
Test your understanding
What does the test verify after migration?
AThat all user records are copied correctly to the new database
BThat the old database schema is deleted
CThat the new database is empty
DThat the database connection is closed
Key Result
Always verify that data migrated to the new database matches exactly the expected records to catch any loss or corruption during migration.