pgTAP:单元测试
pgTAP
是PostgreSQL的一个单元测试扩展。
概述
让我们来介绍一些基本的概念:
- 单元测试:允许你测试一个系统的小部分(如数据库表!)。
- TAP:代表Test Anything Protocol。它是一个框架,旨在简化测试期间的错误报告。
使用方法
启用扩展
- 进入仪表板中的数据库页面。
- 点击侧边栏中的扩展。
- 搜索 "pgtap "并启用该扩展。
测试表
1begin;
2select plan( 1 );
3
4select has_table( 'profiles' );
5
6select * from finish();
7rollback;
API:
has_table()
:测试数据库中是否存在一个表。has_index()
: 检查是否存在与命名表相关的命名索引。has_relation()
: 测试数据库中是否存在一个关系。
测试列
1begin;
2select plan( 2 );
3
4select has_column( 'profiles', 'id' ); # test that the "id" column exists in the "profiles" table
5select col_is_pk( 'profiles', 'id' ); # test that the "id" column is a primary key
6
7select * from finish();
8rollback;
API:
has_column()
: 测试一个列是否存在于给定的表、视图、物化视图或复合类型中。col_is_pk()
: 测试表中指定的列是否是该表的主键。
测试RLS策略#
1begin;
2select plan( 1 );
3
4select policies_are(
5 'public',
6 'profiles',
7 ARRAY [
8 'Profiles are public', # Test that there is a policy called "Profiles are public" on the "profiles" table.
9 'Profiles can only be updated by the owner' # Test that there is a policy called "Profiles can only be updated by the owner" on the "profiles" table.
10 ]
11);
12
13select * from finish();
14rollback;
API:
policies_are()
:测试指定表上的所有策略是否只是该表应该有的策略。policy_roles_are()
: 测试策略适用的角色是否只是该策略上应该有的角色。policy_cmd_is()
: 测试策略适用的命令是否与函数参数中给出的命令相同。
你也可以使用results_eq()
方法来测试策略是否返回正确的数据。
1begin;
2select plan( 1 );
3
4select results_eq(
5 'select * from profiles()',
6 $$VALUES ( 1, 'Anna'), (2, 'Bruce'), (3, 'Caryn')$$
7 'profiles() should return all users'
8);
9
10
11select * from finish();
12rollback;
API:
测试函数
1begin;
2select plan( 1 );
3
4select function_returns( 'hello_world', 'text' ); # test if the function "hello_world" returns text
5select function_returns( 'is_even', ARRAY['integer'], 'boolean' ); # test if the function "is_even" returns a boolean
6select results_eq('select * from hello_world()', 'hello'); # test if the function "hello_world" returns "hello"
7
8select * from finish();
9rollback;
API:
function_returns()
:测试一个特定的函数是否返回一个特定的数据类型。is_definer()
: 测试一个函数是否是安全定义器(即一个 "setuid "函数)。
资源
- 官方
pgTAP
文档