关于Moq的使用策略
来源:互联网 发布:收集附近电话号码软件 编辑:程序博客网 时间:2024/05/16 04:39
Moq是.NET平台下的单元测试框架。Moq的作用是解除要测试的对象对其所依赖的对象的依赖。(这句话比较绕,自习体会一下!)在稍微复杂一点的系统,一个被测试的对象通常会依赖多个对象。为了测试某个对象,该对象必须依赖于抽象,而不是具体。比如A依赖于B,B是A的一个引用,在A的某个方法里面来实例化,然后调用B的某些方法,这样的依赖耦合性太高,一旦B创建失败,那么A也将创建失败。为了避免这种问题,需要依赖于抽象,具体来说就是使用依赖注入,通过控制反转的方式来解决这个问题。
对于被测试的对象,其所依赖的对象,我们采用依赖注入方式来解除耦合,那么这个能够Mock的对象中如果还依赖于其他非依赖注入的对象,我们使用Mock会不会失败呢?根据Mock的定义,Mock执行的动作并不会真的执行,那么从原理上来说,Mock的对象中依赖于其他非依赖注入的对象的动作我们可以不用去关注。
IRandomHelperAdapter.cs
namespace CommonTools{ public interface IRandomHelperAdapter { int GetRandom(); }}RandomHelper.cs
namespace CommonTools{ internal class RandomHelper { public static int GetRandom(int seed) { return new Random(seed).Next(); } }}RandomHelperAdapter.cs
namespace CommonTools{ class RandomHelperAdapter : IRandomHelperAdapter { public int GetRandom() { int seed = RandomSeed.GetRandom(); return RandomHelper.GetRandom(seed); } }}RandomProvider.cs
namespace CommonTools{ public class RandomProvider { private readonly IRandomHelperAdapter randomHelperAdapter; public RandomProvider() :this(new RandomHelperAdapter()) { } public RandomProvider(IRandomHelperAdapter randomHelperAdapter) { this.randomHelperAdapter = randomHelperAdapter; } public int GetRandomNumber() { return randomHelperAdapter.GetRandom(); } }}RandomSeed.cs
namespace CommonTools{ internal class RandomSeed { public static int GetRandom() { return 10; } }}RandomProviderTest.cs
using System.Diagnostics;using CommonTools;using Microsoft.VisualStudio.TestTools.UnitTesting;using System;using Moq;namespace RandomTestProject{ /// <summary> ///这是 RandomProviderTest 的测试类,旨在 ///包含所有 RandomProviderTest 单元测试 ///</summary> [TestClass] public class RandomProviderTest { private Mock<IRandomHelperAdapter> randomHelperAdapterMock; private RandomProvider randomProvider; private int result; [TestInitialize] public void Initialize() { randomHelperAdapterMock = new Mock<IRandomHelperAdapter>(MockBehavior.Strict); randomProvider = new RandomProvider(randomHelperAdapterMock.Object); result = 0; } [TestCleanup] public void CleanUp() { } /// <summary> ///GetRandomNumber 的测试 ///</summary> [TestMethod] public void GetRandomNumberTest() { randomHelperAdapterMock.Setup(x => x.GetRandom()).Returns(result); randomProvider.GetRandomNumber(); } }}结果:
0 0
- 关于Moq的使用策略
- 使用Moq实现单元测试
- 使用Moq修改默认的ASP.NET MVC项目单元测试
- 使用Moq修改默认的ASP.NET MVC项目单元测试
- Moq插件的用法
- Moq 单元测试的意义
- 如何使用MOQ进行单元测试
- 在VS2015中使用Moq
- 如何使用MOQ进行单元测试
- Moq -.NET的Mocking库
- 使用MVC4,Ninject,EF,Moq,构建一个真实的应用电子商务SportsStore(七)
- asp.net mvc3 对HttPost来的表单使用moq进行单元测试
- 使用MVC4,Ninject,EF,Moq,构建一个真实的应用电子商务SportsStore
- 使用Moq让单元测试变得更简单
- 使用Moq模拟AspnetMvc中的Request.Form
- Moq是最流行的mock框架
- [UnitTest04]-Moq判断方法的执行情况
- 关于如何使用策略禁止USB的问题
- Kill命令
- 今天心情不错
- 第五章思维导图
- 根据手机号查询归属地
- CentOS 6.5上使用yum安装Apache
- 关于Moq的使用策略
- StringTokenizer类的使用 分割字符串
- error LNK2001: unresolved external symbol __imp__inet_ntoa@4问题解决
- Leetcode之Reverse Words in a String
- c# 几种常见的数据库连接
- C++ String STL
- 算法竞赛入门经典(第二版)第2章部分学习实现
- 计算未来六天的日期和星期几
- php开启.htaccess文件的功能