[TestFixture]
public class InstantBatchBuyTest
{
private string _mallAbc;
private string _itemCode;
private int _quantity;
private string _items;
Mock<ICatalogService> mockCatalog;
Mock<IShoppingCartService> mockShoppingCartService; [SetUp]
public void Init()
{
_mallAbc = string.Empty;
_itemCode = "18-001-0001";
_quantity = 2; _items = "[{\"qty\":2,\"sku\":\"18-001-0001\"},{\"qty\":4,\"sku\":\"18-001-0002\"},{\"qty\":2,\"sku\":\"18-001-0003\"}]"; var items = new List<ItemInfo>() { new ItemInfo { ItemCode = "18-001-0001" }, new ItemInfo { ItemCode = "18-001-0002" }, new ItemInfo { ItemCode = "18-001-0003" } };
mockCatalog = new Mock<ICatalogService>();
mockCatalog.Setup(s => s.GetItemByCodeList(It.IsAny<List<string>>())).Returns(items); // 这些都是服务端的接口,此处我们可以设置返回值 mockShoppingCartService = new Mock<IShoppingCartService>();
mockShoppingCartService.Setup(s => s.CheckItemInventory("18-001-0001", 2)).Returns(true);
mockShoppingCartService.Setup(s => s.CheckItemInventory("18-001-0002", 4)).Returns(true);
mockShoppingCartService.Setup(s => s.CheckItemInventory("18-001-0003", 2)).Returns(true);
mockShoppingCartService.Setup(s => s.InstantBuyForbiddenBuyProduct(items)).Returns(false);
} [Test]
public void 立即购买_单个商品()
{
var result = new InstantBuyAjaxResult();
// Arrange
var instanItemList = new List<InstantItemModel>() { new InstantItemModel { ItemCode = _itemCode, Quantity = _quantity } };
if (instanItemList.Any())
{
// Act
result =
(new InstantBuyLogic(mockShoppingCartService.Object, mockCatalog.Object)).InstantBuy(
instanItemList);
} // Assert
Assert.AreEqual(result.Status, 1);
} [Test]
public void 立即购买_多个商品()
{
var result = new InstantBuyAjaxResult();
// Arrange
var instanItemList = JsonHelper.JsonToObject<List<InstantItemModel>>(_items);
if (instanItemList != null && instanItemList.Any())
{
// Act
result =
(new InstantBuyLogic(mockShoppingCartService.Object, mockCatalog.Object)).InstantBuy(
instanItemList);
} // Assert
Assert.AreEqual(result.Status, 1);
}
}

需要添加Moq.dll、nunit.framework.dll引用,开发过程中结合Resharper,使用起来更加方便

NUnit+mock+moq单元测试的更多相关文章

  1. Nunit NMock Ncover单元测试

    Nunit中如何进行事务性单元测试   单元测试要求:单元测试方法并不真正去变更数据库,也就是说单元测试不依赖于数据库中的数据.那我们如何解决执行单元测试方法后,不变更数据库中数据呢? 一般的解决方案 ...

  2. unit vs2017基于nunit framework创建单元测试

    unit  vs2017基于nunit framework创建单元测试 一.简叙: 单元测试大型项目中是必备的,所以不可忽视,一个项目的成败就看是否有单元测试,对后期的扩展维护都带来了便利. 二.安装 ...

  3. VS2015+NUnit+OpenCover 完成单元测试代码覆盖率测试

    1.VS2015+NUnit+OpenCover 完成单元测试代码覆盖率测试 https://download.csdn.net/download/qq_39441918/10522539 2.*注意 ...

  4. google mock C++单元测试框架

    转:google mock C++单元测试框架 2012-03-12 09:33:59 http://blog.chinaunix.net/uid-25748718-id-3129590.html G ...

  5. 单元测试NUnit,mock组件NSubstitute,信号量SemaphoreSlim,异步lock等例子

    public class LockTest { private IDatabase _database; private readonly Random _random = new Random(); ...

  6. Spring学习12-Spring利用mock进行单元测试

    一.概述    对于Java组件开发者来说,他们都盼望拥有一组能够对组件开发提供全面测试功能的好用的单元测试.一直以来,与测试独立的Java对象相比,测试传统型J2EE Web组件是一项更为困难的任务 ...

  7. 使用Visual Studio Code Coverage和nunit上传单元测试覆盖率和单元测试结果到SonarQube上

    SonarQube.Scanner.MSBuild.exe begin /k:"OMDCCQuotes" /d:sonar.host.url="http://myip:9 ...

  8. c#单元测试:使用Moq框架Mock对象

    在.net中有几种mock框架可供选择,比如NMock,PhinoMocks,FakeItEasy和Moq.尽管Moq相对较新,但是它非常易用.不需要像传统的Record/Replay.并且使用Moq ...

  9. 使用 Moq 测试.NET Core 应用 -- Mock 方法

    第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 本文介绍使用Moq来Mock方法. 使用的代码: https://git ...

随机推荐

  1. 设计模式学习--复合模式(Compound Pattern)

    设计模式学习--复合模式(Compound Pattern) 概述 ——————————————————————————————————————————————————— 2013年8月4日<H ...

  2. kubernetes组件

    kubernetes组件 @(马克飞象)[k8s] 组件 kubernetes除了必备的dns和网络组件外,官方推出大量的cluster-monitoring,dashboard,fluentd-el ...

  3. 使用cocoapods导入第三方后 报错_OBJC_CLASS_$_XXX

    我们手动导入第三方库的时候,感觉管理不是很方便,于是会选择使用Cocoapods管理.现在记录一下使用心得,当使用cocoapods导入afnetworking或者其他框架的时候,发现调用的时候总是报 ...

  4. angularjs 创建自定义的指令

    创建自定义的指令 除了 AngularJS 内置的指令外,我们还可以创建自定义指令. 你可以使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTMl 元素上需要添加自定义指令名 ...

  5. 设计模式19---设计模式之状态模式(State)(行为型)

    1.场景模拟 考虑一个在线投票的应用,分为四种情况 正常投票 正常投票以后还继续重复投票 用户恶意投票 黑名单用户 2.不用模式的解决方案 package demo17.state.example1; ...

  6. android窗体动画:activity启动从底部向上滑动出现,关闭的时候从顶部向下滑动消失的动画实现

    在IOS系统里,我们打开app都是有启动动画的,这样子在打开一个新窗体,用户感觉有个过渡动画,体验效果很好,不会觉得很突然就冒出一个窗体,下面就实现一个android 的activity启动和关闭动画 ...

  7. 【前端JS】input textarea 默认文字,点击消失

    如题.前端页面的 input textarea 有时候须要显示默认文字以提示用户,下面为实现代码,以 input 为例.textarea 能够直接搬用 HTML <input type=&quo ...

  8. 27个Jupyter快捷键、技巧(原英文版)

    本文是转发自:https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/ 的一篇文章,先记录在此,等有空时我会翻译成中文 ...

  9. nyoj 44

    //nyoj 44 //和上面一题一样,求子串和,但是代码非常简洁..... 时间复杂度为n #include <iostream> using namespace std; int ma ...

  10. sourceTree添加git密钥步骤

    给多个远程服务器比如https://github.com/wangjian2014/wjtest/blob/master/wj.txt添加public密钥 本地服务器添加private密钥     S ...