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

使用 Moq 测试.NET Core 应用 -- 其它

使用的代码: https://github.com/solenovex/Moq4-Tutorial-Code 里面的 05 Before 部分. 抛出异常 这里是指让mock对象抛出异常....首先创建一个测试方法, 设定球员年龄小于16岁时, IPhysicalExamination会在调用IsHealthy()方法时抛出异常: ?...随后在球员审批的方法里, 需要捕获这个异常, 返回相应的结果: ? 这个测试会通过: ? 上面使用的是泛型的版本来抛出异常, 也可以不使用泛型, 直接抛出异常: ?...设定连续调用的不同返回值 使用SetupSequence()方法可以为mock对象的成员在连续调用的时候每次都返回指定的值(或抛出指定的异常): ?...由于这种方法直接返回所需的类型, 所以在使用mock对象的时候就无需使用.Object属性. 该测试也会通过: ?

1.8K40
您找到你想要的搜索结果了吗?
是的
没有找到

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

首先应该做的是在TransferApproval的构造函数里判断参数是否为null, 如果为null的话应该抛出ArgumentNullException: ? 这是更恰当的异常....这样的话, 在测试的时候, 抛出的就是ArgumentNullException, 它可以更恰当的表达程序出现的问题: ? 现在我们可以使用mock版本的依赖项来代替null: ?...还是红色的, 但现在是测试没通过, 并不是抛出异常. 测试没通过的意思就是期待值和实际返回值不符....MockBehavior.Loose, 即使方法没有被预先设置, 调用它的时候也不会抛出异常. 它会返回该方法返回类型的默认值....如果上例使用Strict Mock, 那么将会抛出Exception: ? 下面我把一个测试改为Strict Mock, 取消了对IsHealthy()方法的设置: ?

2.3K40

5 分钟 .NET 单元测试极简入门

如何构建测试项目 单元测试是一种验证代码功能正确性的方法,它可以使用一些特定的框架和工具来编写和运行。...FluentAssertions 是一个断言库,它可以用来验证测试结果是否符合预期,它提供一些易于阅读和表达的断言方法。...调用 BookService 的方法,使用 FluentAssertions 来验证返回值或异常是否符合预期。 运行所有的测试,检查是否通过。 步骤 1 创建项目和添加引用很简单,我这里不再详述。...它测试的是当 author 参数传入 null 或 "" 时,是否抛出了对应的异常,对应的异常信息是否正确。它使用了 [Theory],表示这个方法会接受多轮输入。...ArgumentException 异常 .WithMessage("Start year cannot be greater than end year"); // 验证异常消息是否正确

28750

Mock技术带来的优点

提高测试可靠性, 例如有时这个依赖项的bug太多了, 经常由于依赖项的原因导致测试失败, 那么就应该使用mock版本来验证我们自己写的代码....减少开发/测试成本, 有时程序可能依赖一些云服务, 这些服务是按调用次数收费的, 那么就可以使用Mock版本来节省这方面的开资, 当然最后还是需要使用真正的服务测试才行; 有时候组建依赖项太费劲,...也就是说被测试的系统只有按照特定的顺序调用mock依赖项的特定方法, 那么该系统才算测试通过. 还有其它的一些术语就不介绍, 主要是这四个....跑单元测试, Run All: 测试失败, 抛出NullReferenceException. 而这个异常导致测试无法正常进行....安装Moq 在单元测试项目添加Moq: Moq的第一篇先到这.

4K30

使用 Moq 测试.NET Core - Why Moq?

提高测试可靠性, 例如有时这个依赖项的bug太多了, 经常由于依赖项的原因导致测试失败, 那么就应该使用mock版本来验证我们自己写的代码....减少开发/测试成本, 有时程序可能依赖一些云服务, 这些服务是按调用次数收费的, 那么就可以使用Mock版本来节省这方面的开资, 当然最后还是需要使用真正的服务测试才行; 有时候组建依赖项太费劲,...也就是说被测试的系统只有按照特定的顺序调用mock依赖项的特定方法, 那么该系统才算测试通过. 还有其它的一些术语就不介绍, 主要是这四个. 对于Stub 和 Mock ,可以看下面两张图例: ?...Moq 官网: https://github.com/moq/moq4 Moq框架可以用来创建dummy, stub 和 mock. 在本文里把这三个东西都叫做mock对象吧....测试失败, 抛出NullReferenceException. 而这个异常导致测试无法正常进行.

3K30

Moq基础(三)

上一章区分了下stub,和mock 这一章我们的确要开始讲moq的api ---- Setup系列 Setup系列的函数用于伪造特定方法的返回值。...当然这个方法也会包含属性的方法 Setup:伪造方法 setup伪造方法返回值的格式为伪对象.Setup(fake=>fake.方法名).Returns(返回值) 这里用moq官方文档中的接口为例 public...么事啊,把这些输入情况也伪造 fakeFoo.Setup(fake => fake.DoSomething("swimming")).Returns((string value)=>value+"makes...OK呀,不过这里我们不能用Return,这里我们引入一个新格式,抛出异常 setup伪造方法抛出异常的格式为伪对象.Setup(fake=>fake.方法名).Throws(异常对象) 或者伪对象.Setup...fake => fake.DoSomething(It.IsAny())).Returns((string value)=>value+"makes me slim"); //伪造方法抛出异常

1K20

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

以下是一些关键特点和概念,来介绍 JUnit: 注解和断言: JUnit 使用注解(如 @Test)来标识测试方法,使用断言(如 assertEquals)来验证代码的行为是否符合预期。...异常测试: JUnit 允许测试方法声明预期抛出异常,以确保代码在错误情况下正确处理异常。 超时测试: 可以设置测试方法的超时时间,确保测试在合理的时间内完成。...以下是一些关键特点和概念,用来介绍 pytest: 简洁的语法: pytest 提供简洁的测试用例编写语法,不需要强制使用类或特定的命名约定,这使得测试用例编写更加自然和易读。...创建测试类,使用 [Test] 特性来标记测试方法。编写测试方法,使用断言来验证代码的行为是否符合预期。 4....运行测试: 运行测试用例,以确保被测对象与存根对象一起协作,产生正确的结果。 使用模拟和存根有助于隔离被测代码,使测试更加独立和可重复。这种方法允许你测试代码的特定行为,而不依赖于外部依赖的状态。

30950

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

快速的是指:所有测试都应快速地完成, 集成测试 验证两个或多个组件之间的交互。 验收测试 确保已构建的系统实现既定的全部功能。...2准备进行单元测试 创建单元测试项目执行测试应该依据一定的准则,运用一些技巧或工具,下面列举了常用的技巧和工具。 命名规则 测试类应以被测试的单元命名,测试方法的名称应能够描述待验证的行为。...ExpectedExceptionAttribute:表示测试方法的执行过程中应引发异常,用来判断抛出异常是否符合预期。...例1:标准的3A模式,且只测试一个功能,即返回视图对象是否为null,虽然待验证的点有好几个,但我们一次只验证一个。...null时,是否抛出预期的异常类型,即ArgumentNullException类型 [TestClass] public class AccountTest {

2.1K50

Selenium异常集锦

本文将介绍常见的Selenium通用的异常以及特定于语言的异常。这是一个详尽的列表,当你在代码中遇到异常时可能会有所帮助。...正确捕获/处理异常是一个好习惯,因为未处理的异常会导致程序失败而终止,从而最终影响终端用户体验。异常对象包含有关异常类型,调用堆栈和异常信息等内容,这些信息将有助于调试使代码更可靠。...ScreenshotException 顾名思义,当无法进行屏幕捕获时,会抛出此Selenium异常。这种情况很可能出现在网页/Web应用程序中,其中用户输入了用户名、密码、银行信息等敏感信息。...更好的做法是使用Selenium测试自动化代码中的适当等待时间(以毫秒为单位)来验证被测网页是否加载全完。...在切换到该iframe之前,请使用检查工具验证目标框架的XPath,可以避免次异常的发生。 JavascriptException 执行JavaScript代码时出现问题时,抛出异常

5.2K20

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

添加的这个属性在业务上的意思就是体检室是否可以使用. 如果不可以使用的话, 那么球员的转会操作应该被推迟. 所以还需要为转会结果枚举添加一个推迟: ?...通过上面这一串来判断体检室是否可用. 相应的实现类也要修改: ? 转会审批方法里也要修改: ? 而在单元测试的方法里, 肯定是报错的: ? 按照正常的思路, 我们可能会这样做: ?...但是这样做很麻烦, 而Moq则提供一种简单的方式来处理这种多层的/递归的mock: ? 这样写即可. 测试同样会通过: ?...虽然测试依然不通过, 这是因为逻辑上的问题, 而不会抛出异常: ? 针对这种情况, 还有一种更好的办法. 我们可以为mock对象设定默认值: ?...然后在审批类里, 我设置这个属性的值: ? 上面的代码也就是说, 我的mock对象的某个属性在测试的时候它的值会发生变化. 而Moq可以记住这些mock属性的变化的值..... 新写一个测试: ?

2.6K40

【深入浅出C#】章节 6: 异常处理和调试:异常的概念和处理机制

二、捕获和处理异常 2.1 捕获特定类型的异常 在 C# 中,可以使用 catch 块来捕获特定类型的异常针对不同类型的异常进行不同的处理。...在 InnerMethod() 方法中抛出了一个内部异常,然后在 OuterMethod() 方法中捕获这个异常,并将其包装成一个外部异常抛出。...在 InnerMethod() 方法中抛出了一个内部异常,然后在 OuterMethod() 方法中捕获这个异常,并将其包装成一个外部异常抛出。...在 Main() 方法中,我们捕获这个外部异常使用 PrintExceptionChain() 方法打印异常链。运行代码后,你将看到异常链中包含了内部异常和外部异常的详细信息。...过度使用异常处理可能会影响性能,因此应该尽量避免在正常流程中抛出捕获异常。 使用特定异常类型:尽量使用特定异常类型来捕获特定的错误,而不是使用通用的 Exception 类型。

70740

Java 处理异常 9 个最佳实践,你知道几个?

给出准确的异常处理信息 3. 记录你所指定的异常 4. 使用描述性消息抛出异常 5. 最先捕获特定异常 6. 不要在catch中使用Throwable 7. 不要忽略Exceptions 8....包装异常 总结 ---- 在本文中,作者介绍9个处理异常的最佳方法与实践,以举例与代码展示结合的方式,让开发者更好的理解这9种方式,指导读者在不同情况下选择不同的异常处理方式。...如果抛出一个特定异常,它的类名很可能已经描述这种类型的错误。所以,你不需要提供很多额外的信息。...最先捕获特定异常 大多数IDE都可以帮助你做到这点,当你试图捕获不确定的异常时,它会报告一个不可到达的代码块。...有些人可能会删除阻止异常事件的验证,而没有意识到这造成了问题。或者抛出异常的代码被更改,现在抛出了同一个类的多个异常,而调用的代码并不能阻止所有这些异常

35430

处理Java异常的9个最佳实践

因此,总是尝试找到最适合你的异常事件的类,例如抛出NumberFormatException而不是IllegalArgumentException。避免抛出特定异常。...如果抛出一个特定异常,它的类名很可能已经描述那种错误。因此,你无需提供大量其他信息。一个很好的例子是NumberFormatException。...所以,请永远不要忽视异常。你不知道代码将来会如何变化。有人可能会删除阻止异常事件的验证而不会认识到这会产生问题。...", e); } } 因此,如果你想要处理它,只捕获异常。否则,在方法签名中指定它让调用者处理它。 9.在没有消费的情况下包装异常 有时候捕获标准异常并将其包装成自定义异常会更好。...该异常类提供接受一个特定的构造方法的Throwable作为参数。否则,你将丢失原始异常的堆栈跟踪和消息,这将导致难以分析导致异常异常事件。

72850

Java 处理异常 9 个最佳实践,你知道几个?

给出准确的异常处理信息 3. 记录你所指定的异常 4. 使用描述性消息抛出异常 5. 最先捕获特定异常 6. 不要在catch中使用Throwable 7. 不要忽略Exceptions 8....包装异常 总结 ---- 在本文中,作者介绍9个处理异常的最佳方法与实践,以举例与代码展示结合的方式,让开发者更好的理解这9种方式,指导读者在不同情况下选择不同的异常处理方式。...如果抛出一个特定异常,它的类名很可能已经描述这种类型的错误。所以,你不需要提供很多额外的信息。...最先捕获特定异常 大多数IDE都可以帮助你做到这点,当你试图捕获不确定的异常时,它会报告一个不可到达的代码块。...有些人可能会删除阻止异常事件的验证,而没有意识到这造成了问题。或者抛出异常的代码被更改,现在抛出了同一个类的多个异常,而调用的代码并不能阻止所有这些异常

39330

Java 中处理异常的 9 个实践

在本文中,介绍 9 个处理异常的最佳方法与实践,以举例与代码展示结合的方式,让开发者更好的理解这 9 种方式,指导读者在不同情况下选择不同的异常处理方式。...如果抛出一个特定异常,它的类名很可能已经描述这种类型的错误。所以,你不需要提供很多额外的信息。...最先捕获特定异常 大多数 IDE 都可以帮助你做到这点,当你试图捕获不确定的异常时,它会报告一个不可到达的代码块。...有些人可能会删除阻止异常事件的验证,而没有意识到这造成了问题。或者抛出异常的代码被更改,现在抛出了同一个类的多个异常,而调用的代码并不能阻止所有这些异常。...", e); }} 因此,只需要捕获一个你想要处理的异常,在方法中指定它,让调用者处理它。 9. 包装异常 有时最好捕获一个标准异常并将其封装到一个定制的异常中。

48210

完善你的Laravel异常处理

部分中Laravel设置系统异常处理行为注册全局的异常处理器: class HandleExceptions { public function bootstrap(Application...Laravel中针对常见的程序异常情况抛出了相应的异常实例,这让开发者能够捕获这些运行时异常根据自己的需要来做后续处理(比如:在catch中调用另外一个补救方法、记录异常到日志文件、发送报警邮件、短信...SQL执行后判断被修改的行数来判断UPDATE是否成功,但有的情景里执行的UPDATE语句并没有修改记录值,这种情况就没法通过被修改函数来判断UPDATE是否成功,另外在事务执行中如果捕获到QueryException...ValidationException, 之后异常处理器捕获异常后会把错误提示格式化为项目统一的JSON响应格式输出给客户端。...这样在我们的控制器中就完全省略判断表单验证是否通过如果不通过再输出错误响应给客户端的逻辑,将这部分逻辑交给统一的异常处理器来执行能让控制器方法瘦身不少。

2.7K20

9种处理Java异常的最佳实践

但是您应该用1-2个简短的句子来说明出现异常的原因。这可以帮助您的运营团队了解问题的严重性,还可以使您更轻松地分析任何服务事件。 如果抛出特定异常,则其类名很可能已经描述错误的种类。...} } 「7.不要忽略异常」 您是否曾经分析过仅在用例的第一部分得到执行的错误报告? 这通常是由忽略的异常引起的。开发人员可能非常确定不会将其抛出添加了一个不会处理或记录它的catch块。...您可以找到许多代码段,甚至可以找到捕获,记录和重新抛出异常的库。...「9.在不消耗异常的情况下包装异常」 有时最好捕获一个标准异常并将其包装到自定义异常中。这种例外的典型示例是特定于应用程序或框架的业务例外。这使您可以添加其他信息,还可以对异常类实施特殊处理。...执行此操作时,请确保将原始异常设置为原因。该异常类提供接受一个特定的构造方法的Throwable作为参数。否则,您将丢失堆栈跟踪和原始异常的消息,这将使分析导致您的异常异常事件变得困难。

42910

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券