controller:
public class testcontroller : controller
public testcontroller(iservice service)
this.service = service;
public iservice service
// get: test
public virtual actionresult index()
var result = this.service.foo();
viewbag.res = result;
return view();
測試**:
namespace mytest
public class class1
[fact]
public void indextest()
var mock = new mock();
mock.setup(s => s.foo()).returns("我是模擬的");
testcontroller controller = new testcontroller(mock.object);
viewresult result = controller.index() as viewresult;
assert.equal("我是模擬的", result.viewbag.res);
利用mock實現iservice裡指定的方法,我們實現了foo方法。再呼叫testcontroller裡index方法時,裡的foo方法其實是我用mock模擬的乙個方法並不是真實專案裡的方法。
controller:
public class testcontroller : controller
public testcontroller(iservice service)
this.service = service;
public iservice service
// get: test
public actionresult index()
this.service.foo();
return view();
測試**
namespace mytest
public class class1
[fact]
public void indextest()
var mock = new mock();
mock.setup(s => s.foo());
testcontroller controller = new testcontroller(mock.object);
viewresult result = controller.index() as viewresult;
mock.verify(s => s.foo());
assert.notnull(result);
當模擬的方法沒有返回值的時候我們要確定方式是否執行了,可以使用mock.verify();來判斷方法時候被呼叫,使用方法如上。也可以在設定模擬方法是指定是否驗證被呼叫,例如:
利用verifiable()
mock.setup(s => s.foo()).verifiable();
mock.verify();
ps:verifyall()是驗證所有的方法,不需要指定
利用it.is<>()對引數做乙個驗證,例如
it.is(i => i == 1),引數是1的int型別
mock.verifyall();
給屬性設定預設值:
mock.setup(s => s.lala).returns("12390")
或mock.setupproperty(s => s.lala, "12398");
驗證:
mock.setupset(s => s.lala = "1232");//設定期望值
mock.verifyall();//驗證controller裡的賦值是否與期望值一致
或actionaction = i => ;
mock.verifyset(action);
ps:驗證是常量值也可以使用it類裡的方法代替,例如
it.is(p => p == "33")
驗證是否被呼叫:
mock.verifyget(s => s.lala);
或mock.setup(s => s.lala).verifiable();
mock.verify();
或mock.setup(s => s.lala)
mock.verifyall();
跟蹤屬性值:
mock.setupproperty(s => s.lala, "00");//這樣設定屬性就可以被跟蹤,就可以被修改
var obj = mock.object;
obj.lala = "90";//修改跟蹤的屬性
ps:mock.setup(s => s.lala).returns("12390"),設定屬性不會被跟蹤
模擬受保護的方法:
var mock = new mock();
mock.protected().setup("ox").returns("321");
var res = mock.object;
直接用mock的setup,是沒法模擬protected方法的,mock.protected()就是為了解決這個問題的。
ps:引用命名空間using moq.protected;
測試私有方法:
bar bar = new bar();
var barprivate = new privateobject(bar);
var result = barprivate.invoke("pp");
ps:引用microsoft.visualstudio.qualitytools.unittestframework.dll,路徑是c:\program files (x86)\microsoft visual studio 14.0\common7\ide\publicassemblies\(根據vs版本不同有所不同)下,需要手工新增引用
csp模擬 模擬測試16
fdasds include using namespace std define cle a memset a,0,sizeof a inline int read const int mod 1e9 7,maxn 1e3 100 int n,m,ans 0 int f maxn maxn int...
csp模擬 模擬測試4
t1是暴力分,t2當時沒有花太多時間去推導,一見到t2就十分害怕,便放過了它,t3的話花了大量的時間推了乙個錯誤的解,以後對於t2這種題不要未戰先怯,一點一點的去推導!那一天我們在教室裡許下約定。我至今還記得我們許下約定時的歡聲笑語。我記得她說過她喜歡吃餅乾,很在意自己體重的同時又控制不住自己。她跟...
CSP模擬 模擬測試5
題意是讓求平均值第k小的連續子區間。發現直接計算無論怎麼優化都是 n 2 的,然後發現這樣找k個的似乎可以考慮二分答案。簡單推一下式子。記 sum i 為字首和,顯然符合條件的區間有 frac leq mid 即 sum j j times mid leq sum i i times mid 預設 ...