一、新增依賴
org.springframework.bootspring-boot-starter-test
若測試類的包路徑和啟動類的包路徑不一致,會出現以下錯誤資訊:
neither @contextconfiguration nor @contexthierarchy found for test class [xx.xx.test], using springbootcontextloader
could not detect default resource locations for test class [xx.xx.test]: no resource found for suffixes .
could not detect default configuration classes for test class [xx.xx.test]: test does not declare any static, non-private, non-final, nested classes annotated with @configuration.
三、測試類新增
packagexx.xx.test;
@runwith(springjunit4classrunner.
class
)@springboottest
public
class
@before
public
void
init()
@after
public
void
end()
@beforeclass
public
static
void
initclass()
@afterclass
public
static
void
endclass()
}
packagexx.xx.test;
public
class test extends
@autowired
private
btstradegoodsservice btstradegoodsservice;
@org.junit.test
public
void
add()
}
然後在有@test註解方法的類中使用juint啟動。
在@test註解的方法中,和平時開發專案呼叫介面是一樣的。
四、註解
1、類註解
@runwith:
1.表示執行方式,@runwith(junit4testrunner)、@runwith(springrunner.class)、@runwith(powermockrunner.class) 三種執行方式,分別在不同的場景中使用。
1.當乙個類用@runwith注釋或繼承乙個用@runwith注釋的類時,junit將呼叫它所引用的類來執行該類中的測試而不是開發者去在junit內部去構建它。我們在開發過程中使用這個特性。
@springboottest:
1.1.當沒有特定的contextconfiguration#loader()(@contextconfiguration(loader=...))被定義那麼就是springbootcontextloader作為預設的contextloader。
1.2.自動搜尋到springbootconfiguration註解的檔案。
1.3.允許自動注入environment類讀取配置檔案。
1.4.提供乙個webenvironment環境,可以完整的允許乙個web環境使用隨機的埠或者自定義的埠。
1.5.註冊了testresttemplate類可以去做介面呼叫。
2.新增這個就能取到spring中的容器的例項,如果配置了@autowired那麼就自動將物件注入。
@webintegrationtest("server.port:0"):
2、方法註解
@beforeclass:方法只能是static void。
@afterclass:方法只能是static void。
@before:@test執行之前呼叫的方法,可以做初始化操作
@after:執行完測試用例需要執行的清理工作
@test:測試用例的單元
@mock:
有點類似autowired註解,而@mock註解是自動實現模擬物件,而並非bean例項建立。
正式環境只是乙個介面,並沒有實現,也並沒有納入spring容器進行管理。使用bddmockito對行為進行**。
@ignore("not ready yet"):該方法不執行
執行順序是:@beforeclass→@before→@test→@after→@afterclass
當啟動測試類,測試類中有多個@test,@beforeclass和@afterclass只會執行一次,每乙個@test都會執行一次@before和@after。
五、對controller進行測試
1、使用瀏覽器直接訪問:
2、使用測試類:
packagexx.xx.ctrl;
import
import
org.springframework.web.bind.annotation.requestparam;
import
org.springframework.web.bind.annotation.restcontroller;
@restcontroller
public
class
userctrl
public string show(@requestparam("id")string id)
}
packagexx.xx.test;
import
org.junit.after;
import
org.junit.afterclass;
import
org.junit.before;
import
org.junit.beforeclass;
import
org.junit.runner.runwith;
import
org.springframework.boot.test.context.springboottest;
import
org.springframework.test.context.junit4.springrunner;
@runwith(springrunner.
class
)@springboottest(webenvironment =springboottest.webenvironment.random_port)
public
class
@before
public
void
init()
@after
public
void
end()
@beforeclass
public
static
void
initclass()
@afterclass
public
static
void
endclass()
}
packagexx.xx.test;
import
org.springframework.beans.factory.annotation.autowired;
import
org.springframework.boot.test.web.client.testresttemplate;
public
class test extends
@autowired
private
testresttemplate testresttemplate;
@org.junit.test
public
void
toindex()
@org.junit.test
public
void
toshow()
@override
public
void
init()
}
使用這種方式,在@springboottest註解中一定要新增webenvironment = springboottest.webenvironment.random_port
Spring Boot中使用MongoDB資料庫
前段時間分享了關於spring boot中使用redis的文章,除了redis之後,我們在網際網路產品中還經常會用到另外一款著名的nosql資料庫mongodb。下面就來簡單介紹一下mongodb,並且通過乙個例子來介紹spring boot中對mongodb訪問的配置和使用。mongodb是乙個基...
Spring Boot中使用MongoDB資料庫
前段時間分享了關於spring boot中使用redis的文章,除了redis之後,我們在網際網路產品中還經常會用到另外一款著名的nosql資料庫mongodb。下面就來簡單介紹一下mongodb,並且通過乙個例子來介紹spring boot中對mongodb訪問的配置和使用。mongodb是乙個基...
SpringBoot中使用日誌
結果 所有配置檔案都會被載入,高優先順序的配置檔案會覆蓋低優先順序的配置檔案 springboot 底層是spring框架,spring框架預設是用jcl springboot選用slf4j和logback作為日誌框架 如何使用slf4j import org.slf4j.logger import...