咨询电话:400-035-7887/021-6072 5770
首页 关于我们 下载与支持 产品社区
SPASVO移动站
  • 泽众
  • 自动化测试
    TestOne(一站式自动化测试) ATF(自动化测试框架) AutoRunner(自动化测试) MobileRunner(移动自动化测试)
  • 测试管理
  • 性能测试
    PerformanceRunner (性能测试软件) web pr(在线性能测试) APM (性能监控软件)
  • RPA机器人
  • 研发管理
    ALM(研发管理工具) 代码扫描CA
  • 泽众云测试
    兼容性测试 真机测试 Alltesting云真机
  • 客户案例
  • 合作代理
    为什么加入我们 申请加入代理
  • 全部产品

    性能测试

    PerformanceRunner (性能测试软件) APM(性能监控软件) web-PR(免费在线性能测试)

    RPA机器人

    AutoRunner Process 业务流程挖掘系统

    自动化测试

    TestOne(一站式自动化测试) ATF(自动化测试框架) AutoRunner(自动化测试软件) MobileRunner(移动自动化测试) AR365(自动化测试)

    测试管理

    ALM+TestCenter(生命周期管理软件) ProjectCenter(项目管理软件) TestCenter(测试管理软件) RequisiteCenter(需求管理) CodeAnalyzer(静态分析) 免费版TCE(bug管理工具)

    信创产品

    PerformanceRunner(性能测试软件) ALM+TestCenter(生命周期管理软件) ATF(自动化测试框架) AutoRunner(自动化测试软件) CodeAnalyzer(静态分析)

    测试服务

    第三方验收测试服务 性能测试服务 兼容性测试服务 安全测试服务 SPASVO测试实验室
  • 新闻资讯
  • 解决方案

    金融

    银行 自动化测试解决方案 手机银行兼容性测试解决方案 性能测试解决方案 测试体系与测试管理系统建设解决方案 研发项目管理解决方案 测试管理解决方案 银行众包测试解决方案 大数据测试用例自动生成解决方案 功能测试解决方案 证券公司(投资) 自动化测试解决方案 研发项目管理解决方案 测试管理解决方案 大数据测试用例自动生成解决方案 券商APP兼容性测试解决方案 生产日志回放解决方案 保险 自动化测试解决方案 测试管理解决方案 研发项目管理解决方案 基金 自动化测试解决方案 功能测试解决方案

    研究院所

    需求管理解决方案 真机云测试解决方案 性能测试解决方案 自动化测试解决方案 APM性能调优/全链路压测解决方案 研发项目管理解决方案 测试管理解决方案

    企业

    移动端兼容性测试解决方案 众包测试解决方案 第三方验收测试 性能测试方案 app自动化测试解决方案 安全测试解决方案 自动化测试解决方案 APM性能调优/全链路压测解决方案 研发项目管理解决方案 测试管理解决方案

    高等教育

    软件测试实验室建设方案 测试管理实训方案 测试实训课程方案 性能测试实训方案 移动测试实验室方案 自动化测试实训方案 云真机实验室建设方案 RPA机器人实验室建设方案 软件工程实验室建设方案 高校软件测试教程解决方案 高校软件测试教学资源包解决方案 软件测试教案和课件建设方案 测试学院 测试实战平台 测试实训平台

    医疗行业

    真机云测试解决方案 预决算管理解决方案 第三方验收测试

    政府

    测评中心/机构 真机云测试解决方案 测试实战平台 政府单位/软件园区 性能测试解决方案 自动化测试解决方案 第三方测试解决方案 移动端(app、h5、小程序)兼容性测试解决方案 研发项目管理解决方案 测试管理解决方案
  • 性能测试
  • PerformanceRunner (性能测试软件) APM (性能监控软件)
  • 自动化测试
  • TestOne(一站式自动化测试) ATF(自动化测试框架) AutoRunner(自动化测试) MobileRunner(移动自动化测试)
  • 研发管理
  • ALM(研发项目管理) TestCenter(测试管理软件)
  • RPA机器人
  • 代码扫描CA
  • 云真机
  • 性能测试
  • PerformanceRunner (性能测试软件) APM(性能监控软件) web-PR(免费在线性能测试)
  • RPA机器人
  • AutoRunner Process 业务流程挖掘系统
  • 自动化测试
  • TestOne(一站式自动化测试) ATF(自动化测试框架) AutoRunner(自动化测试软件) MobileRunner(移动自动化测试) AR365(自动化测试)
  • 测试管理
  • ALM+TestCenter(生命周期管理软件) ProjectCenter(项目管理软件) TestCenter(测试管理软件) RequisiteCenter(需求管理) CodeAnalyzer(静态分析) 免费版TCE(bug管理工具)
  • 信创产品
  • PerformanceRunner(性能测试软件) ALM+TestCenter(生命周期管理软件) ATF(自动化测试框架) AutoRunner(自动化测试软件) CodeAnalyzer(静态分析)
  • 测试服务
  • 第三方验收测试服务 性能测试服务 兼容性测试服务 安全测试服务 SPASVO测试实验室
  • 新闻资讯
  • 行业
  • 金融 研究院所 企业 高等教育 医疗行业 政府
  • 关于我们
您的位置:软件测试 >> 软件测试技术 >> 单元测试

使用Moq让单元测试变得更简单

作者:网络转载 发布时间:[ 2013/11/18 16:49:27 ] 推荐标签:

  这个类用于模拟对象的行为。像是否按照默认的模式去模拟。让我们进一步看看他的定义:
namespace Moq
{
// Summary:
//     Options to customize the behavior of the mock.
public enum MockBehavior
{
// Summary:
//     Causes the mock to always throw an exception for invocations that don't have
//     a corresponding setup.
Strict = 0,
//
// Summary:
//     Will never throw exceptions, returning default values when necessary (null
//     for reference types, zero for value types or empty enumerables and arrays).
Loose = 1,
//
// Summary:
//     Default mock behavior, which equals Moq.MockBehavior.Loose.
Default = 1,
}
}
  现在,看看如下例子:
  var mock = new Mock<IFake>(MockBehavior.Strict);
  指定了mock行为是的,如果没有按照预期的Setup会抛出异常。
  MockFactory
  这是一个模拟对象的工厂,我们不仅仅可以定制创建模拟对象的配置,也可以成批测试它们。看看下边例子:
var factory = new MockFactory(MockBehavior.Strict) { DefaultValue = DefaultValue.Mock };
// Create a mock using the factory settings
var fooMock = factory.Create<IFake>();
// Create a mock overriding the factory settings
var barMock = factory.Create<IEmailSender>(MockBehavior.Loose);
// Verify all verifiable expectations on all mocks created through the factory
factory.Verify();
  在前边,我们已经介绍了传统方式的创建模拟对象,它不会去真正的调用方法,而是仅仅去执行一些假设:如果...那么返回... 。
  在下边的例子里,我将继续介绍一些Mock<T> 类中基本并且重要的方法。
  Verification
  有时候,我们要确定一个方法是否被调用了,或者甚至要知道它被调用了多少次。一个比较传统的方式是使用Verify()方法。看看下边例子:
  mock.Verify(foo => foo.DoSomething("Ping"), Times.Once());
  上边的代码尝试验证DoSomething("Ping")需要被调用,并且只调用一次。出了Once选项,这里也有更多的选项可供你选择去决定这个方法需要被调用多少次。如: AtLeast, AtLeastOnce, AtMost, AtMostOnce, Between, Equals, Exactly, Never, 和Once
  一旦我们已经模拟了对象,验证将是个轻松的任务,看看下边的例子:
public void Test_FindByName_GetCalled()
{
// create some mock data
IList<Product> products = new List<Product>
{
new Product { ProductId = 1, Name = "C# Unleashed",
Description = "Short description here", Price = 49.99 },
new Product { ProductId = 2, Name = "ASP.Net Unleashed",
Description = "Short description here", Price = 59.99 },
new Product { ProductId = 3, Name = "Silverlight Unleashed",
Description = "Short description here", Price = 29.99 }
};
Mock<IProductRepository> mock = new Mock<IProductRepository>();
//mock
//.Setup(sender => sender.FindById(It.IsAny<int>()))
//.Returns((int s) => products.Where(
//    x => x.ProductId == s).Single());
mock.Object.FindById(1);
mock
.Verify(x => x.FindById(1), Times.Once());
}
}
  在上边的例子里,有两个地方值得注意。
  首先是mock.Object.FindById(1)。为了在这个case里让一切变得简单,我们直接调用mock.Object的方法。为什么呢?因为我们这个case只关注这个方法被调用的次数,而不关注返回值。当然,在实际的应用中我们很少这样做。
  第二,你有没有注意到被注释掉的句子。它仅仅是一个“如果,那么”句子。意思是说,如果Setup 好了,返回我们定义的值。
  由于调查的时间有限,还有很多关于Mock给力的地方我没有涉及到。我们可以去查看官方的资料。欢迎共同讨论。

 

上一页12下一页
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

相关推荐

iOS单元测试mocha、chai、sinon和istanbul实现百分之百的单元测试覆盖率关于单元测试的总结及思考编写更好的Java单元测试的7个技巧Android单元测试框架Robolectric3.0介绍(一)使用Kiwi单元测试总结单元测试如此重要,为什么你不知道Python单元测试??使用装饰器实现测试跳过和预期故障对Controller的单元测试写好单元测试的10个技巧单元测试的重要性Angular单元测试系列??Component、Directive、Pipe 以及ServiceAndroid单元测试的整理提升单元测试体验的利器--Mockito使用总结iOS UnitTest单元测试Vue的单元测试探索(二)

相关产品

机器人流程自动化

机器人流程自动化

自动化测试工具

自动化测试工具

移动平台自动化测试工具

移动平台自动化测试工具

测试管理工具

测试管理工具

代码质量管理

代码质量管理

软件研发生命周期管理

软件研发生命周期管理

ATF自动化测试框架软件

ATF自动化测试框架软件

性能测试工具

性能测试工具

项目管理软件

项目管理软件

需求管理软件

需求管理软件

更新发布

App、小程序、H5兼容性测试区别在哪些?

2024/9/11 15:34:34

兼容性测试覆盖多少机型,如何选择?

2024/9/10 11:13:49

P-One 在进行性能测试时,如何确保测试结果的准确性和可靠性?

2024/9/10 10:14:12

为什么越来越多的企业选择一站式测试平台?

2024/9/9 18:04:26

功能测试和接口测试的区别

2023/3/23 14:23:39

如何写好测试用例文档

2023/3/22 16:17:39

常用的选择回归测试的方式有哪些?

2022/6/14 16:14:27

测试流程中需要重点把关几个过程?

2021/10/18 15:37:44

热门文章

常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南

咨询电话

021-6072 5770-8054

沪公网安备 31010702002953号

沪ICP备07036474号 2003-2020 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd.

测试工具快速入口

测试管理工具/缺陷管理工具 项目管理软件 自动化测试工具/功能测试工具 移动自动化测试工具/App测试工具 ALM生命周期管理 性能测试工具/压力测试工具 Selenium自动化测试框架 RPA机器人流程自动化

帮助与支持

测试服务 RPA解决方案 核心业务系统测试解决方案 测试用例设计解决方案 接口测试解决方案 界面自动化测试解决方案 移动端自动化测试解决方案 性能测试解决方案 需求管理解决方案 代码管理解决方案 预决算管理解决方案 兼容性测试解决方案 众测(众包测试)测试解决方案 搭建测试体系解决方案 第三方验收测试解决方案 安全测试解决方案

关注我们

咨询热线:021-6072 5770-8054

金融专线:021-6072 5770-8006

sales@spasvo.com

沪ICP备07036474号 2003-2022 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd.
公众
账号

扫描二维码
关注泽众微信公众号

泽众官网公众号
问题
反馈
返回
顶部