Spring 單元測試中使用 Sql準備資料

2021-10-09 16:36:03 字數 2972 閱讀 8645

在寫單元測試時,往往需要在資料庫中準備對應的測試資料。

我們可以在測試用例中,通過**的方式往資料庫中插入資料。但這麼做會使測試**比較臃腫。

個人覺得,通過sql指令碼去匯入資料,再結合@transactional註解對資料進行回滾,是一種更好的方案。

為此,spring為我們準備了很有用的註解@sql。

@sql註解可以執行sql指令碼,也可以執行sql語句。它既可以加上類上面,也可以加在方法上面。

預設情況下,方法上的@sql註解會覆蓋類上的@sql註解,但可以通過@sqlmergemode註解來修改此預設行為。

@sql有下面的屬性:

例如:

@sql()

@sql

(scripts =

"/insert_data1.sql"

, statements =

"insert into student(id, name) values (100, 'shiva')"

)@extendwith

(springextension.

class

)@contextconfiguration

class

)public

class

sqltest

@sql

("/insert_more_data1.sql"

)@test

public

void

fetchrows2()

}

drop_schema.sql :

drop

table

ifexists student;

create_schema.sql :

create

table student (

id int

notnull

, name varchar(50

)not

null

,primary

key(id)

);

insert_data1.sql :

insert

into student(id, name)

values

(101

,'mohan');

insert

into student(id, name)

values

(102

,'krishna'

);

insert_more_data1.sql :

insert

into student(id, name)

values

(103

,'indra');

insert

into student(id, name)

values

(104

,'chandra'

);

@sqlconfig用於配置如何去解釋@sql註解中指定的sql指令碼。

@sqlconfig可以用於類上,也可以用於方法上。

@sql註解也有乙個config屬性,作用與@sqlconfig相同,不同的是作用域只在對應的@sql註解範圍。它的優先順序也大於類註解的@sqlconfig。

例子:

@sqlconfig

(commentprefix =

"#")

@sql()

@sql

(scripts =

)@extendwith

(springextension.

class

)@contextconfiguration

class

)public

class

sqlconfigtest

@sql

(scripts =

"/insert_more_data2.sql"

, config=

@sqlconfig

(commentprefix =

"~")

)@test

public

void

fetchrows2()

}

insert_data2.sql :

#insert initial data

insert

into student(id, name)

values

(101

,'mohan');

insert

into student(id, name)

values

(102

,'krishna'

);

@sqlmergemode可以加在類上,也可以加在方法上。用於指示方法上的@sql和類上@sql註解配置是否合併。方法上的@sqlmergemode註解優先順序更高。預設值是sqlmergemode.mergemodeoverride

例:

@sqlmergemode

(mergemode.merge)

@sql()

@extendwith

(springextension.

class

)@contextconfiguration

class

)public

class

sqlmergemodetest

@sqlmergemode

(mergemode.override)

@sql

("/insert_more_data1.sql"

)@test

public

void

fetchrows2()

}

spring單元測試使用

開發過程中單元測試是必不可少的,下面就來說一下spring單元測試的使用。很簡單,乙個示例就很清楚了。以下為源 示例 package com.cinyi.user import org.junit.test import org.junit.runner.runwith import org.spr...

單元測試中使用Unitls

以前做單元測試,使用dbunit,但dbunit沒有針對單元測試做太多的東西,雖然靈活,但使用起來不方便,而且也沒有想rails裡面那樣為怎樣在單元測試中準備測試資料提供乙個比較好的規範和約束。使用中還得自己參照rails寫了很多 進行封裝。最近發現乙個開源的框架unitils,乙個對junit的擴...

Spring單元測試

component transactional runwith springjunit4classrunner.class public class linesynctest spring testcontext 框架提供和junit4.5x整合的測試。提供 runwith springjunit4...