網(wǎng)站首頁 編程語言 正文
本篇體驗(yàn)Moq的一些基本用法。首先通過NuGet安裝Moq。
模擬方法的返回值
public class HelperClass
{
public virtual Boolean IsEnabled()
{
throw new Exception();
}
}
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var mock = new Mock<HelperClass>();
mock.Setup(x => x.IsEnabled()).Returns(true);
Assert.AreEqual(mock.Object.IsEnabled(),true);
}
}
- Moq模擬的方法一般是virtual虛方法,接口方法
- mock.Object是指HelperClass的實(shí)例
模擬方法后執(zhí)行回調(diào)函數(shù)
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
string temp = "";
var mock = new Mock<HelperClass>();
mock.Setup(x => x.IsEnabled()).Returns(true).Callback(() => { temp = "success"; });
Assert.AreEqual(mock.Object.IsEnabled(),true);
if (temp == "success")
{
//TODO
}
}
}
- 執(zhí)行Return方法后,執(zhí)行Callback回調(diào)方法,接收的參數(shù)類型是委托
模擬方法依次返回多個(gè)值
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var mock = new Mock<HelperClass>();
mock.SetupSequence(x => x.IsEnabled())
.Returns(true)
.Returns(false);
Assert.AreEqual(mock.Object.IsEnabled(),true);
Assert.AreEqual(mock.Object.IsEnabled(), false);
}
}
- SetupSequence方法可以為方法返回多個(gè)值
如果把以下2句:
Assert.AreEqual(mock.Object.IsEnabled(),true);
Assert.AreEqual(mock.Object.IsEnabled(), false);
顛倒一下順序,變成:
Assert.AreEqual(mock.Object.IsEnabled(), false);
Assert.AreEqual(mock.Object.IsEnabled(),true);
結(jié)果,測(cè)試不通過。因?yàn)镾utupSequence返回方法返回值的時(shí)候是有順序的。
模擬第二次調(diào)用方法返回異常
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var mock = new Mock<HelperClass>();
mock.SetupSequence(x => x.IsEnabled())
.Returns(true)
.Throws(new Exception());
Assert.AreEqual(mock.Object.IsEnabled(),true);
Assert.AreEqual(mock.Object.IsEnabled(), true);
}
}
- 通過Throws方法,在第二次調(diào)用IsEnable()方法時(shí)拋出異常。
直接返回被模擬方法的原始返回值
public class HelperClass
{
public virtual Boolean IsEnabled()
{
throw new Exception();
}
}
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var mock = new Mock<HelperClass>();
mock.CallBase = true;
mock.SetupSequence(x => x.IsEnabled())
.CallBase();
Assert.AreEqual(mock.Object.IsEnabled(), true);
}
}
在被模擬的HelperClass類中,IsEnabled方法內(nèi)部拋出異常。當(dāng)把Moq實(shí)例的CallBase屬性設(shè)置為true,并調(diào)用CallBase方法,可在測(cè)試方法中直接返回被模擬類中方法的原始返回值。
模擬泛型類
public class HelperClass<T> where T : class
{
public virtual Boolean IsEnabled()
{
throw new Exception();
}
}
public class Sample{}
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var mock = new Mock<HelperClass<Sample>>();
mock.SetupSequence(x => x.IsEnabled()).Returns(true);
Assert.AreEqual(mock.Object.IsEnabled(), true);
}
}
原文鏈接:https://www.cnblogs.com/darrenji/p/3869602.html
相關(guān)推薦
- 2022-10-27 golang?map的基本操作及定義方式_Golang
- 2022-07-18 CSS浮動(dòng)定位與背景樣式
- 2022-07-15 QT中QByteArray與char、int、float之間的互相轉(zhuǎn)化_C 語言
- 2022-05-03 基于Python制作一款屏幕顏色提取器_python
- 2022-12-14 Oracle?REGEXP_LIKE模糊查詢用法例子_oracle
- 2022-06-12 postgreSQL數(shù)據(jù)庫基本概念教程_PostgreSQL
- 2022-07-06 C#中LINQ?to?DataSet操作及DataTable與LINQ相互轉(zhuǎn)換_C#教程
- 2022-04-16 python字符串不可變數(shù)據(jù)類型_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支