postgresql新增单元测试模块
Posted LightDB分布式数据库非官方技术站点
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgresql新增单元测试模块相关的知识,希望对你有一定的参考价值。
src/test/下的各个模块的单元测试通过make check执行的时候,本质上是调用pg_regress(它包含一个完整的测试框架)程序运行用例。
Perl-based TAP(Test Anything Protocol) tests
====================src/test/perl/ contains shared infrastructure that\'s used by Perl-based tests across the source tree, particularly tests in src/bin and src/test. It\'s used
to drive tests for backup and restore, replication, etc - anything that can\'t really be expressed using pg_regress or the isolation test framework.The tests are invoked via perl\'s \'prove\' command, wrapped in PostgreSQL makefiles to handle instance setup etc. See the $(prove_check) and
$(prove_installcheck) targets in Makefile.global. By default every test in the t/ subdirectory is run. Individual test(s) can be run instead by passing
something like PROVE_TESTS="t/001_testname.pl t/002_othertestname.pl" to make.You should prefer to write tests using pg_regress in src/test/regress, or isolation tester specs in src/test/isolation, if possible. If not, check to
see if your new tests make sense under an existing tree in src/test, like src/test/ssl, or should be added to one of the suites for an existing utility.
示例如下:
PATH="/home/zjh/Sources/postgresql-13.3/tmp_install/home/zjh/stage/lightdb-x/bin:$PATH" LD_LIBRARY_PATH="/home/zjh/Sources/postgresql-13.3/tmp_install/home/zjh/stage/lightdb-x/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress ============== creating temporary instance ============== ============== initializing database system ============== ============== starting postmaster ============== running on port 64472 with PID 20426 ============== creating temporary tablespace ============== CREATE TABLESPACE ============== creating database "contrib_regression" ============== CREATE DATABASE ALTER DATABASE ============== running regression test queries ============== test test_integerset ... ok 1945 ms ============== shutting down postmaster ============== ============== removing temporary instance ============== ===================== All 1 tests passed. =====================
默认情况下,因为没有开启TAP,所以如果测试用例里面启用了TAP测试,会提示TAP测试未开启,如下:
# src/test/modules/test_misc/Makefile
TAP_TESTS = 1
ifdef USE_PGXS
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
else
subdir = src/test/modules/test_misc
top_builddir = ../../../..
include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/contrib/contrib-global.mk
endif
PGXS中的所有选项解析http://www.light-pg.com/docs/lightdb/current/extend-pgxs.html。
make -j1 checkprep >>\'/home/zjh/Sources/postgresql-13.3\'/tmp_install/log/install.log 2>&1
TAP tests not enabled
如果启用了TAP,则会运行t/目录下的.pl用例,如下:
PATH="/home/zjh/Sources/postgresql-13.3/tmp_install/home/zjh/lightdb-x/bin:$PATH" LD_LIBRARY_PATH="/home/zjh/Sources/postgresql-13.3/tmp_install/home/zjh/lightdb-x/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir= --dbname=contrib_regression test_pg_dump ============== removing existing temp instance ============== ============== creating temporary instance ============== ============== initializing database system ============== ============== starting postmaster ============== running on port 64472 with PID 20089 ============== creating temporary tablespace ============== CREATE TABLESPACE ============== creating database "contrib_regression" ============== CREATE DATABASE ALTER DATABASE ============== running regression test queries ============== test test_pg_dump ... ok 35 ms ============== shutting down postmaster ============== ============== removing temporary instance ============== ===================== All 1 tests passed. ===================== rm -rf \'/home/zjh/Sources/postgresql-13.3/src/test/modules/test_pg_dump\'/tmp_check /usr/bin/mkdir -p \'/home/zjh/Sources/postgresql-13.3/src/test/modules/test_pg_dump\'/tmp_check cd . && TESTDIR=\'/home/zjh/Sources/postgresql-13.3/src/test/modules/test_pg_dump\' PATH="/home/zjh/Sources/postgresql-13.3/tmp_install/home/zjh/lightdb-x/bin:$PATH" LD_LIBRARY_PATH="/home/zjh/Sources/postgresql-13.3/tmp_install/home/zjh/lightdb-x/lib:$LD_LIBRARY_PATH" LTPORT=\'65432\' LT_REGRESS=\'/home/zjh/Sources/postgresql-13.3/src/test/modules/test_pg_dump/../../../../src/test/regress/pg_regress\' /usr/bin/prove -I ../../../../src/test/perl/ -I . t/*.pl t/001_base.pl .. ok All tests successful. Files=1, Tests=669, 5 wallclock secs ( 0.03 usr 0.00 sys + 0.86 cusr 0.79 csys = 1.68 CPU) Result: PASS
tap是否启用在src/Makefile.global.in中大约445行判断,如下:
ifeq ($(enable_tap_tests),yes) ifndef PGXS define prove_installcheck rm -rf \'$(CURDIR)\'/tmp_check $(MKDIR_P) \'$(CURDIR)\'/tmp_check cd $(srcdir) && \\ TESTDIR=\'$(CURDIR)\' PATH="$(bindir):$$PATH" LTPORT=\'6$(DEF_PGPORT)\' \\ top_builddir=\'$(CURDIR)/$(top_builddir)\' \\ LT_REGRESS=\'$(CURDIR)/$(top_builddir)/src/test/regress/pg_regress\' \\ $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) $(if $(PROVE_TESTS),$(PROVE_TESTS),t/*.pl) endef else # PGXS case define prove_installcheck rm -rf \'$(CURDIR)\'/tmp_check $(MKDIR_P) \'$(CURDIR)\'/tmp_check cd $(srcdir) && \\ TESTDIR=\'$(CURDIR)\' PATH="$(bindir):$$PATH" PGPORT=\'6$(DEF_PGPORT)\' \\ top_builddir=\'$(top_builddir)\' \\ PG_REGRESS=\'$(top_builddir)/src/test/regress/pg_regress\' \\ $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) $(if $(PROVE_TESTS),$(PROVE_TESTS),t/*.pl) endef endif # PGXS define prove_check rm -rf \'$(CURDIR)\'/tmp_check $(MKDIR_P) \'$(CURDIR)\'/tmp_check cd $(srcdir) && \\ TESTDIR=\'$(CURDIR)\' $(with_temp_install) LTPORT=\'6$(DEF_PGPORT)\' \\ LT_REGRESS=\'$(CURDIR)/$(top_builddir)/src/test/regress/pg_regress\' \\ $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) $(if $(PROVE_TESTS),$(PROVE_TESTS),t/*.pl) endef else prove_installcheck = @echo "TAP tests not enabled" prove_check = $(prove_installcheck) endif
全局运行的时候,make check不会跑TAP测试,make checkworld才会跑TAP测试。
所以新增功能用例如果是纯粹sql类(如unsafe_tests其实放在regress下就可以,不用单独模块),放在src/test/regress下最简单,否则建议在src/test/modules下新增模块。如果跑访问内核或c实现、测试客户端或guc的,通常必须单独模块,用extension机制如test_shm_mq。
SwiftUI Xcode项目新增单元测试(Unit Test)后预览(Preview)崩溃的解决
现象
Xcode里的SwiftUI项目,在创建项目时未添加单元测试。
稍后几次迭代后,添加了单元测试(Unit Test)支持, 在添加了几个测试方法后,测试全部通过。
但是,此时回到任意SwiftUI View的预览界面,会发现预览视图发生崩溃,点击预览视图顶部的分析按钮,会发现Xcode提示如下错误:
App_Tests.swift not found in any targets
App_Tests.swift must belong to at least one target in the current scheme in order to use previews
其中,App_Tests.swift是我们之后添加单元测试类的文件,其中包括了所有测试方法。
以上是关于postgresql新增单元测试模块的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI Xcode项目新增单元测试(Unit Test)后预览(Preview)崩溃的解决