再說模擬測試

2021-09-27 13:24:29 字數 3180 閱讀 2156

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 預設 ...