首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Moq +单元测试 - 如何将Action传递给我的类来测试是否调用了Action?

在使用Moq进行单元测试时,如果需要测试一个类是否调用了Action,可以通过以下步骤实现:

  1. 首先,在测试类中创建一个Mock对象,模拟要测试的类。
代码语言:csharp
复制
var mock = new Mock<YourClass>();
  1. 然后,使用Setup方法设置一个Action,用于在调用该方法时执行。
代码语言:csharp
复制
mock.Setup(x => x.YourMethod(It.IsAny<Action>()))
    .Callback((Action action) => action());
  1. 在测试方法中,使用Verify方法验证Action是否被调用。
代码语言:csharp
复制
mock.Verify(x => x.YourMethod(It.IsAny<Action>()), Times.Once);

完整的示例代码如下:

代码语言:csharp
复制
[Test]
public void TestActionCalled()
{
    var mock = new Mock<YourClass>();
    mock.Setup(x => x.YourMethod(It.IsAny<Action>()))
        .Callback((Action action) => action());

    // 调用要测试的方法
    mock.Object.YourMethod(() => { /* 要执行的Action */ });

    // 验证Action是否被调用
    mock.Verify(x => x.YourMethod(It.IsAny<Action>()), Times.Once);
}

这样,就可以通过Moq和单元测试来验证一个类是否调用了Action。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

测试 ASP.NET Core API Controller

点击resharper在测试旁边提供CoverAll按钮: ? 随后会出现单元测试窗口和覆盖率窗口. 直接看覆盖率窗口: ? 可以看到该Controller和方法覆盖率都是100%了....看它POST Action方法, 很多地方需要被测试: ? 测试ModelState 首先可以测试product为null情况, 但是这个太简单了, 我就不啰嗦了....然后通过moqVerify()方法判定repositoryAddProduct()和unitOfWorkSaveAsync()方法分别被调用了....然后在UnitOfWorkSaveAsync()执行后有个Callback()回, 回时相当于模拟了EFCore保存, 把最新值赋给了productModel(看被测试代码), (其实这里不用...可以再写两个测试覆盖它们: ? 这两个很简单, 不多介绍了, 注意这里使用了async版本Assert.Throws(). 这两个测试会pass, 最终该方法代码覆盖率就达到100%了: ?

2.3K40

ASP.NET MVC编程——单元测试

1自动化测试基本概念 自动化测试分为:单元测试,集成测试,验收测试单元测试 检验被测单元功能,被测单元一般为低级别的组件,如一个方法。...单元测试要满足四个条件:自治,可重复,独立,快速。 自治是指:关注于验证某个单一功能,例如只关注于某个方法功能。 可重复是指:无论何时允许同一段测试代码都应该得到相同结果。...2准备进行单元测试 创建单元测试项目并执行测试应该依据一定准则,运用一些技巧或工具,下面列举了常用技巧和工具。 命名规则 测试应以被测试单元命名,测试方法名称应能够描述待验证行为。...虽然可能对控制器应用了过滤器,但单元测试调用控制器时是不会调用过滤器;此外我们注册全局过滤器也不会被调用。...要测试过滤器,就要模拟HTTP上下文、请求等。此外,建议将具体验证逻辑代码封装起来,这样可以将其作为普通测试

2.1K50

Moq基础 判断方法被执行

本文是在Moq基础(五)基础上做补充 例如有方法 Foo 支持注入接口 IFoo 需要判断在 Foo 方法里面调用 IFoo Foo 方法几次 public class Foo...使用 使用了之后就可以在运行单元测试时候看到有哪些方法可以运行,有哪些不通过 ?...因为在 Setup 里面调用时候,实际是说构造出哪些方法是虚拟方法 对于不需要被调用方法就不会在 Setup 构造,这样如果发现被测试用了没有被虚拟方法,那么证明这个被测试有坑 另外在做出虚拟方法时候...这里请看Moq基础(五) 参数匹配,回,和验证 里面有详细说到。...那么在实际运行被测试方法之后,就可以通过 Verify 判断某个方法被调用了多少次 mock.Verify(fake => fake.虚拟方法, 被调用多少次); 这里被调用多少次是可以是 Times

1.4K20

asp dotnet core 基于 TestServer 做集成测试

然而这个方法一开启我就被拖出去了…… 因为开启主机会占用端口,而刚好我几个项目都采用了相同端口 而我开始尝试在配置文件里面指定随机端口,而此时又有玄学网络权限,但是我又不知道将谁拖出去 此时小伙伴给我安利了...,其实就是将启动主机逻辑替换掉,如 ASP.NET Core搭建多层网站架构【12-xUnit单元测试之集成测试】 - kasnti - 博客园 这篇博客所说方法,咱新建一个静态,用来创建主机和运行...是进行配置,这里进行一些测试项目特意配置,如禁用了 APM 服务。...而使用 AssemblyCleanup 方法可以在单元测试完成之后,无论是否成功都会调用一次 因此在 GlobalInitialize 方法标记 AssemblyInitialize 特性,在这里面创建主机然后运行主机...return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); } } 新建一个单元测试测试这个接口访问

93810

这样入门asp.net core,如何

一、使用到命令 dotnet new :创建项目(解决方案,库,单元测试等),如:dotnet new web dotnet add package 添加一个nuget引用 dotnet test...,由void换成IServiceProvider;此返回为AutofacServiceProvider一个实例;在上述过程中,使用了continerBuilder.Populate方法将service...五、加入单元测试 在实际开发中,经常需要用到单元测试。.net core单元测试也是如此 so easy, fallow me。...运行dotnet new xunit -n baseWebTest,即可创建一个以xunit为测试框架单元测试项目 运行dotnet add package Moq,安装Moq模拟框架(此命令需要进入到...编写单元测试代码如下: using System; using Xunit; using Moq; using baseWeb.Controllers; using baseWeb.Services;

2.1K60

前后端分离开发模式下后端质量保证 —— 单元测试

在我们了解完单元测试概念之后,我们会探讨一下什么样单元测试算得上是好单元测试,它们具备哪些特征,如何使用隔离框架帮助我们对一些复杂组件进行测试。...但是对于“测试” 我们每个人都轻车熟路, 你看看下面的功能是否似曾相识? ?...而我们只是在脑海中预想了一下它应该如何工作,应该给我什么结果等,然后运行一下,咦,还真是这样,那我们测试就算通过了。...另外Moq作为一个不错单元测试Mock框架也推荐给大家。...Xunit:这是一个开源单元测试工具 Moq:为了让单元测试可以完全脱离外部组件,我们需要用到一些Mock对象和Stub对象,而Moq是一个开源Mock框架可以帮助我们实现这些功能 。

1.3K100

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

第一篇文章, 关于Mock概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 本文介绍使用MoqMock方法....上一篇文章, 我在单元测试时候, 把依赖项设为null: ? 然后便出现了NullReferenceException, 导致测试无法正常运行....让我们调试一下这个测试, 我在TransferApproval里面设置一个端点, 查看一下这个mock依赖项方法返回值: ? 然后调试测试: ? 跑到断点 ?...It 而PhysicalExamination这个具体实现由于各种原因导致还没有实现, 为了让它不妨碍我们单元测试, 我先设定让它在无论传进什么参数情况下都会返回true....那么现在所有的测试都应该可以通过了: ? 这里用到了It这个, 在Moq里, It这个是用来做参数匹配, it 就是"它"意思, 它就代表需要被匹配参数.

2.3K40

asp dotnet core 不正经提升效率单元测试方法

在写 asp dotnet core 时,如果没有单元测试保证,需要每个方法都从 web api 入口开始运行,此时执行效率是很低。而如果写单元测试,又有一个坑问题是写单元测试也是需要时间。...至于能不能用好不好用就请观众老爷自己决定 CUnit 中文命名单元测试 在写单元测试时,小伙伴说需要让单元测试方法名符合 条件_执行_结果 而要求这个方法命名为英文,我英文就超级渣,这一点 少珺 小伙伴可以帮我证明...写单元测试时,大量单元测试方法命名将会占用大量时间,让小伙伴不愿意写单元测试。...DotNetGitLabWebHook用到方法,代码请看 github 是不是觉得写起来特别快 用 CUnit(MSTestEnhancer) 能让团队内小伙伴写单元测试效率提升,也能提升团队里面读单元测试以及单元测试炸了解决效率...而如果需要每个都自己创建,这个创建效率实在太低,因为创建一个需要在他构造函数传入其他,而这个构造函数可能后续修改,这样单元测试小伙伴都想砍人 简单方法是在单元测试创建服务

67020

重温《单元测试艺术》,总结常用知识点

前言 关于单元测试定义和好处可以借用Stephen Cleary一段话概括: 单元测试是现代开发基础。...6.2 Mock(模拟对象) 模拟对象(Mock)是系统中伪对象,它可以验证被测试对象是否按照预期方式调用了这个伪对象,因此导致单元测试通过或者失败。通常每个测试最多有一个模拟对象。...前面定义Stub和Mock都使用了Fake-前缀,因为在中避免使用"mock"和"stub",那么这个对象就可以具有两种行为方式,以后再不同测试中重用。 7.....NET隔离框架有很多,《单元测试艺术》书中以NSubstitute(简称NSub)为例介绍了隔离框架基本用法(看起来最近nuget下载量比moq更多)。...结语 虽然《单元测试艺术》是一本有点旧书,但我是不是还是会拿出来重温并推荐给别人,毕竟.NET专门讲单元测试书不多。如果有其它单元测试方面的优秀书籍请推荐给我

1.5K31

单元测试】--工具与环境

以下是一些关键特点和概念,介绍 JUnit: 注解和断言: JUnit 使用注解(如 @Test)标识测试方法,并使用断言(如 assertEquals)验证代码行为是否符合预期。...创建测试项目: 通常,你需要为你单元测试创建一个独立测试项目。你可以使用 Visual Studio 创建测试项目,或者手动创建一个库项目存放测试代码。...编写测试用例: 在测试项目中,编写测试用例。创建测试,并使用 [Test] 特性标记测试方法。编写测试方法,使用断言验证代码行为是否符合预期。 4....通常,你可以使用第三方库,如 Moq、NSubstitute 或 Rhino Mocks,创建模拟和存根对象。以下是使用 Moq 作为示例步骤: 1....安装 Moq NuGet 包: 在 NUnit 项目中,首先需要安装 Moq NuGet 包。你可以使用 NuGet 包管理器或命令行工具执行此操作。

31050

Flux

(M与V之间互相影响,数据流不清楚) 作用: 提升数据一致性 易于精确定位bug 便于单元测试 三.结构 产生action 传递action...而不是一次view交互触发一个大action,大action触发下面的级联action 由store完成控制反转,store不提供setXXX()允许外部影响内部state,唯一方式是通过在dispatcher...dispatcher本身只负责把action传递给所有store,每个store在dispatcher注册自己并提供一个回,dispatcher收到action后,所有已注册store都将通过各自拿到...actiontype) action也可能来自别处,比如服务端,数据初始化时,服务返回错误码或者服务数据更新了,通过触发action同步视图 四.特点 强制同步 action分发/传递和store内部更新...而store只接收action,想对store做单元测试的话,只需要给一个初态,再丢过来一个action,然后看终态是否符合预期即可 语义化action store要根据action更新state,这样一个

83120

Android必须要掌握东西

Android中单元测试; 优点 为代码提供保障 优化设计, 编写单元测试从调用者角度观察, 迫使设计者吧程序设计成易于调试和可测试, 并且消除软件中耦合....文档记录, 是一种展示函数或者使用最佳文档 具有回归性, 编写完成后可以随时快速测试. JUnit简介 基于Java语言单元测试框架....开发人员一般需要新建一个TestCase, 然后在该测试中添加测试函数....测试哪些条件 边界条件 是单元测试需要重要测试地方 覆盖执行路径 模拟所需功能模块 手动mock对象 使用Mockito库 Android中单元测试 Google在Junit基础上进行拓展, 使之能在...Request,操作封装 所有对图形操作都会记录在这里,供之后图形创建使用 Action Action代表了一个具体加载任务,主要用于图片加载后结果回,有两个抽象方法,complete和error

47310

Moq基础(一)

在教程开始之前,先回顾下单元测试应该有哪些特点? ---- 运行快,自动化,结果稳定,隔离等等。 但是并不是所有的方法都能写出这样单元测试。...,验证运行DoA方法时,是否向日志写入了Finish A 那么问题来了,我们需要在每次运行单元测试时,要真正读写文件。...那么这个单元测试能够做到运行快,结果稳定,隔离等等要求么?如果我们例子中日志系统换成数据库,网络请求会怎样呢? 如果这个时候我们能够伪造一个日志系统,是否问题就能够解决了呢?...不是的,单元测试还有一个特点是易于编写。我们这样子手工编写一个单元测试成本还是太高了。这么简单东西是不是应该有一个隔离框架做呢? 于是就到了我们主角,Moq。...先让大家体验一下使用Moq自动创建代码替换我们手动创建FakeLog。

98520

使用 Moq 测试.NET Core 应用 -- Mock 属性

单元测试里对属性进行mock非常简单: ? 这个测试也会通过: ? 递归Mock 修改一下IPhysicalExamination接口, 形成一个多层嵌套属性: ?...通过上面这一串判断体检室是否可用. 相应实现也要修改: ? 转会审批方法里也要修改: ? 而在单元测试方法里, 肯定是报错: ? 按照正常思路, 我们可能会这样做: ?...为属性设置默认值 但是, 问题来了, 我还有一些其它单元测试方法, 它们也需要用到这个属性, 现在它们状态是: ?...实现: ? 然后在审批里, 我设置了这个属性值: ? 上面的代码也就是说, 我mock对象某个属性在测试时候它值会发生变化. 而Moq可以记住这些mock属性变化值........新写一个测试: ? 这里使用mockObj.SetupProperty()方法开始追踪属性. 这个测试会通过: ?

2.6K40

Moq基础(六)

同样,另一方面,如果后期方法A又调用了一个T.D(),那么前者测试会过,后者会失败,提醒用户修改测试。 至于选择,我个人是没有什么偏好,大家自己喜欢就好。...---- CallBase :调用基方法 如果你期望某些方法调用原类型虚方法默认实现,可以使用 var mock = new Mock { CallBase = true }; 这个在测试有一大堆虚方法时十分有效...成员 如果需要测试Protected成员行为,你可以使用下面的方式(不过到了这一步,可能已经意味着你代码需要再审查一遍结构是否合理了) //无参数 mock.Protected() .Setup...下面说说对Moq看法。 Moq作为一个受限单元测试框架,做到了免费,简单,易用。 应该说能够满足大部分应用需求。...但是,Moq只是我们书写单元测试工具,他真正威力在于使用者。 兵无常势,水无常形。框架总会更新,创建测试能力才是需要保留

81730

【Web技术】639- Web前端单元测试到底要怎么写?

我们看到大多数教程都会讲单元测试重要性、一些有代表性测试框架 api 怎么使用,但在实际项目中单元测试要怎么下手?测试用例应该包含哪些具体内容呢?...本文从一个真实应用场景出发,从设计模式、代码结构分析单元测试应该包含哪些内容,具体测试用例怎么写,希望看到童鞋都能有所收获。...对于 reducer,我们主要测试两个方面: 对于未知 action.type ,是否能返回当前状态。 对于每个业务 type ,是否都返回了经过正确处理状态。...是否用了正确 selector 获得请求时要发送参数 */ expect(gen.next().value).toEqual(select(getBizToolbar)); expect...最后我们可以利用覆盖率来看下用例覆盖程度是否足够(一般来说不用刻意追求 100%,根据实际情况定): ? 单元测试是 TDD 测试驱动开发基础。

3K30
领券