在寫單元測試時,往往需要在資料庫中準備對應的測試資料。
我們可以在測試用例中,通過**的方式往資料庫中插入資料。但這麼做會使測試**比較臃腫。
個人覺得,通過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.mergemode
的override
。
例:
@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...