首页 > 解决方案 > 数据库触发器在集成测试中不起作用

问题描述

我创建了数据库触发器来管理我的 Postgres 模式中为我的 Spring 引导应用程序创建和更新的时间戳。当我运行集成测试时,我看到创建和更新的字段没有被触发器更改并且仍然为空。我正在使用 docker-compose 运行我的集成测试。我使用 Flyway 管理表版本控制和迁移。我最初创建了表,稍后使用另一个迁移脚本添加了触发器(如下所述)。有没有办法测试触发功能或我的触发功能有什么问题?

下面是触发函数:

CREATE OR REPLACE FUNCTION set_created_updated_dates()
  RETURNS TRIGGER AS
$$
BEGIN
  IF (TG_OP = 'INSERT') THEN
    NEW.created := CURRENT_TIMESTAMP;
    NEW.updated := CURRENT_TIMESTAMP;
  ELSIF (TG_OP = 'UPDATE') THEN
    NEW.updated := CURRENT_TIMESTAMP;
  END IF;

  RETURN NEW;
END;
$$
  LANGUAGE plpgsql;

routings 是我的表的名称:

CREATE TRIGGER routings_set_created_updated_dates
  BEFORE INSERT OR UPDATE
  ON routings
  FOR EACH ROW
EXECUTE PROCEDURE set_created_updated_dates();

这是我的码头工人撰写文件:

version: '3'
services:
  mockserver:
    image: "artifactory.random/docker/jamesdbloom/mockserver:mockserver-5.5.1"
    ports:
      - 1080
  database:
    image: postgres:10.5
    environment:
      - POSTGRES_DB=test
      - POSTGRES_USER=test
      - POSTGRES_PASSWORD=test123
    ports:
      - 5432

标签: javapostgresqldocker-composeintegration-testingdatabase-trigger

解决方案


推荐阅读