66
77
88@pytest .fixture (scope = "function" )
9- def db_connection ():
9+ def mysql_db_connection ():
1010 # 配置数据库连接
1111 connection = ConnectionFactory .get_connection (
1212 dbms_name = "mysql" ,
@@ -36,8 +36,67 @@ def db_connection():
3636 # 清理数据和关闭连接
3737 connection .close ()
3838
39- def test_db_rollback_error_table (db_connection ):
40- mb = Mybatis (db_connection , "mapper" )
39+ @pytest .fixture (scope = "function" )
40+ def postgresql_db_connection ():
41+ # 配置数据库连接
42+ connection = ConnectionFactory .get_connection (
43+ dbms_name = "mysql" ,
44+ host = "localhost" ,
45+ user = "mybatis" ,
46+ password = "mybatis" ,
47+ database = "mybatis"
48+ )
49+ connection .start_transaction ()
50+ cursor = connection .cursor ()
51+ cursor .execute ("DROP TABLE IF EXISTS fruits" )
52+ create_table_sql = '''CREATE TABLE IF NOT EXISTS fruits (
53+ id SERIAL PRIMARY KEY,
54+ name VARCHAR(100),
55+ category VARCHAR(100),
56+ price int)
57+ '''
58+ # 在测试开始前准备数据
59+ cursor .execute (create_table_sql )
60+ cursor .execute ("INSERT INTO fruits (name, category, price) VALUES ('Alice', 'A', 100)" )
61+ cursor .execute ("INSERT INTO fruits (name, category, price) VALUES ('Bob', 'B', 200)" )
62+ connection .commit ()
63+
64+ # 提供数据库连接给测试用例
65+ yield connection
66+
67+ # 清理数据和关闭连接
68+ connection .close ()
69+
70+ @pytest .fixture (scope = "function" )
71+ def sqlite3_db_connection ():
72+ # 配置数据库连接
73+ connection = ConnectionFactory .get_connection (
74+ dbms_name = "sqlite3" ,
75+ db_path = "./test.db"
76+ )
77+ connection .start_transaction ()
78+ cursor = connection .cursor ()
79+ cursor .execute ("DROP TABLE IF EXISTS fruits" )
80+ create_table_sql = '''CREATE TABLE IF NOT EXISTS fruits (
81+ id INTEGER PRIMARY KEY AUTOINCREMENT,
82+ name VARCHAR,
83+ category VARCHAR,
84+ price INTEGER)
85+ '''
86+ # 在测试开始前准备数据
87+ cursor .execute (create_table_sql )
88+ cursor .execute ("INSERT INTO fruits (name, category, price) VALUES ('Alice', 'A', 100)" )
89+ cursor .execute ("INSERT INTO fruits (name, category, price) VALUES ('Bob', 'B', 200)" )
90+ connection .commit ()
91+
92+ # 提供数据库连接给测试用例
93+ yield connection
94+
95+ # 清理数据和关闭连接
96+ connection .close ()
97+
98+ def test_db_rollback_error_table (mysql_db_connection ):
99+ mb = Mybatis (mysql_db_connection , "mapper" )
41100 @mb .Insert ("INSERT INTO fruits2 (name, category, price) VALUES ('Candy', 'B', 500)" )
42101 def insert ():
43102 pass
@@ -65,8 +124,8 @@ def update():
65124 except mybatis .errors .DatabaseError as err :
66125 assert True
67126
68- def test_db_rollback_error_table2 (db_connection ):
69- mb = Mybatis (db_connection , "mapper" )
127+ def test_db_rollback_error_table2 (mysql_db_connection ):
128+ mb = Mybatis (mysql_db_connection , "mapper" )
70129 try :
71130 mb .insert ("testDBRollbackInsert" , {})
72131 except mybatis .errors .DatabaseError as err :
@@ -77,6 +136,99 @@ def test_db_rollback_error_table2(db_connection):
77136 except mybatis .errors .DatabaseError as err :
78137 assert True
79138
139+ try :
140+ mb .update ("testDBRollbackUpdate" , {})
141+ except mybatis .errors .DatabaseError as err :
142+ assert True
143+
144+
145+ def test_postgresql_db_rollback_error_table (postgresql_db_connection ):
146+ mb = Mybatis (postgresql_db_connection , "mapper" )
147+ @mb .Insert ("INSERT INTO fruits2 (name, category, price) VALUES ('Candy', 'B', 500)" , primary_key = "id" )
148+ def insert ():
149+ pass
150+
151+ try :
152+ insert ()
153+ except mybatis .errors .DatabaseError as err :
154+ assert True
155+
156+ @mb .Delete ("DELETE FROM fruits2 WHERE id=1" )
157+ def delete ():
158+ pass
159+
160+ try :
161+ delete ()
162+ except mybatis .errors .DatabaseError as err :
163+ assert True
164+
165+ @mb .Delete ("UPDATE fruits2 SET name='Candy' WHERE id=1" )
166+ def update ():
167+ pass
168+
169+ try :
170+ update ()
171+ except mybatis .errors .DatabaseError as err :
172+ assert True
173+
174+ def test_postgresql_db_rollback_error_table2 (postgresql_db_connection ):
175+ mb = Mybatis (postgresql_db_connection , "mapper" )
176+ try :
177+ mb .insert ("testDBRollbackInsert" , {}, primary_key = "id" )
178+ except mybatis .errors .DatabaseError as err :
179+ assert True
180+
181+ try :
182+ mb .delete ("testDBRollbackDelete" , {})
183+ except mybatis .errors .DatabaseError as err :
184+ assert True
185+
186+ try :
187+ mb .update ("testDBRollbackUpdate" , {})
188+ except mybatis .errors .DatabaseError as err :
189+ assert True
190+
191+ def test_sqlite3_db_rollback_error_table (sqlite3_db_connection ):
192+ mb = Mybatis (sqlite3_db_connection , "mapper" )
193+ @mb .Insert ("INSERT INTO fruits2 (name, category, price) VALUES ('Candy', 'B', 500)" , primary_key = "id" )
194+ def insert ():
195+ pass
196+
197+ try :
198+ insert ()
199+ except mybatis .errors .DatabaseError as err :
200+ assert True
201+
202+ @mb .Delete ("DELETE FROM fruits2 WHERE id=1" )
203+ def delete ():
204+ pass
205+
206+ try :
207+ delete ()
208+ except mybatis .errors .DatabaseError as err :
209+ assert True
210+
211+ @mb .Delete ("UPDATE fruits2 SET name='Candy' WHERE id=1" )
212+ def update ():
213+ pass
214+
215+ try :
216+ update ()
217+ except mybatis .errors .DatabaseError as err :
218+ assert True
219+
220+ def test_sqlite3_db_rollback_error_table2 (sqlite3_db_connection ):
221+ mb = Mybatis (sqlite3_db_connection , "mapper" )
222+ try :
223+ mb .insert ("testDBRollbackInsert" , {}, primary_key = "id" )
224+ except mybatis .errors .DatabaseError as err :
225+ assert True
226+
227+ try :
228+ mb .delete ("testDBRollbackDelete" , {})
229+ except mybatis .errors .DatabaseError as err :
230+ assert True
231+
80232 try :
81233 mb .update ("testDBRollbackUpdate" , {})
82234 except mybatis .errors .DatabaseError as err :
0 commit comments