有两个表格Employees
和Department
有一个测试夹具sessionWrapper
,它包装每个测试。 sessionWrapper
是一个简单的函数,可以在测试完成运行后在session
块中创建新的finally
并回滚。再次测试并不意味着数据库,我们决定最好的事情就是回滚数据。这是通过一个简单的test
夹具sessionWrapper
实现的,它包装了每个测试,如下所示。 fixture为每个测试提供session
(它创建)。
现在我有一个测试,它将Employee
记录插入Employees
表。 Employees
表与department
表具有FK关联。所以我需要先insert
Department
记录此测试的一部分。
sessionWrapper { implicit session =>
session.withTransaction {
val departmentRow = DepartmentRow(1, Option("Department1"))
val deptId = department.insert(departmentRow)
val employeeRow = EmployeeRow(-1, Option(deptId), "John", "Doe")
employee.insert(employeeRow)
}
}
抛出
(org.postgresql.util.PSQLException:ERROR: insert or update on table "employees" violates foreign key constraint "fk_employees_department"
Detail: Key (dept_id)=(1) is not present in table "department".)
不应departmentRow
插入employee
插入同一交易中吗?
这是一个相当常见的场景,所以你如何测试这样一个简单的FK关系用例?