安裝獲取文件:go doc github.com/golang/mock/gomock
**生成包:go get github.com/golang/mock/mockgen
介面檔案
//定義介面檔案,如下。並實現介面
package demo
type demointer inte***ce
生成**
source: 指定介面檔案
destination: 生成的檔名
package:生成檔案的包名
imports: 依賴的需要import的包
aux_files:介面檔案不止乙個檔案時附加檔案
build_flags: 傳遞給build工具的引數
mockgen -destination=
./mock/mock_demo.
go--source=
./demo.go-
package
=mock_demo
使用mock
建立***_test.go檔案
建立測試方法:test***(t *testing.t) {}
方法中使用mock:
a.建立控制器:c := gomock.newcontroller(t)
b.例項化mock:rs := mock_demo.new***(c)
c.設定對應方法的返回:rs.expect().demoaction().return(data, nil)
d.呼叫對應方法
e.判斷結果
分析mock生成的**
gomock.newcontroller(t):返回1個控制例項
newmock***(c):
//生成的mock型別
type mock*** struct
//這裡主要是例項化根據你之前定的介面而生成的mock型別
func
new***tool
(ctrl *gomock.controller)
*mock***
mock.recorder =
&mock***mockrecorder
return mock
}
3.ts.expect().demoaction().return(data, nil)
//expect() 返回允許呼叫方指示預期用途的物件
func
(m *mock***tool)
expect()
*mock***mockrecorder
//demoaction() 這裡主要是模擬基礎方法,返回同你真正定義的方法
func
(m *mock***tool)
demoaction()
(***,
error
)//初始化模擬的方法
func
(mr *mock***mockrecorder)
demoaction()
*gomock.call
//return() 追加模擬的方法和模擬的引數和返回到 *call內
func
(c *call)
return
(rets ...
inte***ce
)*call
//迴圈判斷引數的型別是否和初始化的一致
for i, ret :=
range rets
else
if got ==
nil}
else
if got.
assignableto
(want)
else
}//將方法追加到模擬方法庫中
c.addaction
(func([
]inte***ce)[
]inte***ce
)return c
}
結尾
所以就是模擬你要測試的方法中的所需要到的其他方法。比如資料庫操作,rpc方法等。
一千個人眼中有一千個哈姆雷特,但是一定要多多研究和思考!加油!
Mockito JUnit實現單元測試
這種組合方式,可以理解為僅依賴的是junit和mockito,spring沒寫是因為關鍵註解的使用,並沒有用到 resource componentscan等,1 首先匯入包 junit junit 4.12 test org.mockito mockito all 1.10.19 test org...
Google Test單元測試使用
google開源了很多實用的模組,比如google gtest google gmock google glog google gflags google ctemplate google sparsehash protobuf perftools,gtest是c 的測試模組,提供豐富的測試方法 軟...
spring單元測試使用
開發過程中單元測試是必不可少的,下面就來說一下spring單元測試的使用。很簡單,乙個示例就很清楚了。以下為源 示例 package com.cinyi.user import org.junit.test import org.junit.runner.runwith import org.spr...