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

使用moq返回null的模拟方法抛出NullReferenceException

是因为moq默认情况下不支持直接返回null值。当我们使用moq进行方法的模拟时,如果我们希望模拟的方法返回null值,并且在调用该方法时抛出NullReferenceException异常,我们可以通过以下方式来实现:

  1. 使用Throws方法抛出异常:我们可以使用moq的Throws方法来模拟方法返回null并抛出NullReferenceException异常。示例代码如下:
代码语言:csharp
复制
var mockObject = new Mock<IFoo>();
mockObject.Setup(foo => foo.Method()).Throws<NullReferenceException>();

// 调用模拟方法
var result = mockObject.Object.Method(); // 这里会抛出NullReferenceException异常
  1. 使用Callback方法抛出异常:我们还可以使用moq的Callback方法来自定义方法的行为,并在其中抛出NullReferenceException异常。示例代码如下:
代码语言:csharp
复制
var mockObject = new Mock<IFoo>();
mockObject.Setup(foo => foo.Method()).Returns(null).Callback(() => throw new NullReferenceException());

// 调用模拟方法
var result = mockObject.Object.Method(); // 这里会抛出NullReferenceException异常

需要注意的是,以上示例中的IFoo是一个接口,你可以将其替换为你实际使用的类或接口。

关于moq的更多用法和详细介绍,你可以参考腾讯云的产品介绍链接:moq产品介绍

希望以上回答能够满足你的需求,如果还有其他问题,请随时提问。

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

相关·内容

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

上一篇文章, 我在单元测试时候, 把依赖项设为null: ? 然后便出现了NullReferenceException, 导致测试无法正常运行....首先应该做是在TransferApproval构造函数里判断参数是否为null, 如果为null的话应该抛出ArgumentNullException: ? 这是更恰当异常....这样的话, 在测试时候, 抛出就是ArgumentNullException了, 它可以更恰当表达程序出现问题: ? 现在我们可以使用mock版本依赖项来代替null了: ?...MockBehavior.Loose, 即使方法没有被预先设置, 调用它时候也不会抛出异常. 它会返回方法返回类型默认值....Moq建议是: 大多数情况下应该使用Loose Mock, 只有特殊需要时候才去使用Strict Mock. out参数 修改一下TransferApproval类转会审批方法: ?

2.3K40

Mock技术带来优点

所以编写测试代码时候, 我们需要提供这些依赖. 而针对隔离测试, 并不应该使用生产时用依赖项, 所以我们使用模拟版本依赖项, 这些模拟版依赖项只能用于测试时, 它们会使隔离更加容易....它可以使用很直接方式模拟依赖项行为....与Stub不同是, Mock期待不是返回值, Mock期待是动作执行. 它是依赖项动态包装, 它可以对哪个方法以什么样顺序被待测试系统(SUT)调用这个期待行为进行预编程....这时, 我们也许可以传null进去? 这时, 项目是不报错了. 跑单元测试, Run All: 测试失败, 抛出NullReferenceException. 而这个异常导致了测试无法正常进行....所以, 我们需要Moq, 它可以提供一个Mock(模拟)版本IPhysicalExamination, 并把它传递到审批类构造函数里.

4.1K30

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

所以编写测试代码时候, 我们需要提供这些依赖. 而针对隔离测试, 并不应该使用生产时用依赖项, 所以我们使用模拟版本依赖项, 这些模拟版依赖项只能用于测试时, 它们会使隔离更加容易. ?...它可以使用很直接方式模拟依赖项行为....与Stub不同是, Mock期待不是返回值, Mock期待是动作执行. 它是依赖项动态包装, 它可以对哪个方法以什么样顺序被待测试系统(SUT)调用这个期待行为进行预编程....这时, 我们也许可以传null进去? ? 这时, 项目是不报错了. 跑单元测试, Run All: ? 测试失败, 抛出NullReferenceException....所以, 我们需要Moq, 它可以提供一个Mock(模拟)版本IPhysicalExamination, 并把它传递到审批类构造函数里. 安装Moq 在单元测试项目添加Moq: ?

3.1K30

Microsoftthrifty:RPC方法返回NULL异常处理

https://blog.csdn.net/10km/article/details/86244875 我们知道:thrift框架是不允许返回值为null,如果返回值为null,client...端会抛出异常,我在之前用facebook/swift框架时就遇到了这个问题,这是当时解决问题记录《thrift:返回null解决办法》,现在使用Microsoft/thrifty框架实现客户端同样也存在这个问题..., "Missing result"); } } } 可以看到,返回结果为null时,会抛出类型为MISSING_RESULTThriftException异常。...知道了原因,解决问题方法有了: /** * 当前调用回调函数,由当前接口方法设置 */ final ServiceMethodCallback callback =...null抛出ThriftException异常会在这里被拦截发给callback对象 callback.onError(error); } };

1.4K40

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

使用代码: https://github.com/solenovex/Moq4-Tutorial-Code 里面的 05 Before 部分. 抛出异常 这里是指让mock对象抛出异常....随后在球员审批方法里, 需要捕获这个异常, 并返回相应结果: ? 这个测试会通过: ? 上面使用是泛型版本来抛出异常, 也可以不使用泛型, 直接抛出异常: ?...设定连续调用不同返回使用SetupSequence()方法可以为mock对象成员在连续调用时候每次都返回指定值(或抛出指定异常): ?...Linq to Mocks 我们可以把之前写设定代码使用Linq方式来写: ? 这里要使用Mock.Of()方法. 参数lambda表达式里面可以设定mock对象成员返回值....由于这种方法直接返回所需类型, 所以在使用mock对象时候就无需使用.Object属性了. 该测试也会通过: ?

1.8K40

NullReferenceException,就不应该存在!

那么 DoSomething 被调用时候,直接就会抛出 NullReferenceException。这个方法比较简单,我们猜 _value 为 null 基本不会有问题了,方法复杂一点儿就难猜了。...所以,为了解决这些困惑,我建议在开发中以如下方式对待我们 null: 对任何可被外部模块调用方法参数进行 null 判断,并在参数为 null抛出 ArgumentNullException。...不要在方法返回 null。如果你无法根据现有状态完成方法承诺任务,请抛出具体异常并给出真实原因。...如果确实要用 null 在程序中代表某种状态,请确定这能够代表某种唯一确定状态,并强制要求使用方判空。...再次重申:我们使用 null 一定是因为它代表了某种确定特殊含义,而不是代表了一堆不明所以错误!

1.1K10

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

本文示例代码没有使用最近有争议 Moq 库,而是使用了 NSubstitute 代替。...使用 NSubstitiue 来配置模拟对象行为,例如返回一些预设数据或抛出一些异常。...顾名思义,安排就是准备一些测试数据和设置模拟返回值,执行就是执行 _sut 被测试方法,断言就是根据执行方法拿到结果,判断是否正确,以决定是否通过测试。详情我都写在代码注释里了,请详细阅读。...它测试是当 author 参数传入 null 或 "" 时,是否抛出了对应异常,对应异常信息是否正确。它使用了 [Theory],表示这个方法会接受多轮输入。...然后又使用了两个 [InlineData]。这个测试方法会被运行两次,一次参数 author 会是 null,另一次会是 ""。很简单吧。

32250

C# 可为空引用类型

导致可为空引用类型不尽理想一些原因在于: 对空值调用成员会导致 System.NullReferenceException 异常抛出,导致生产代码抛出 System.NullReferenceException...减少 NullReferenceException 抛出:降低 NullReferenceException 异常抛出可能性,具体是通过改进静态流分析,标记出可能存在问题情况,即调用值成员之一前未显式检查值是否为空...text = null; 减少 NullReferenceException 抛出 支持将类型声明为可为空或不可为空后,至于确定声明是否可能违反规定,现在就取决于编译器静态流分析选择。...,最终都会减少潜在 NullReferenceException 抛出。...例如,如果某方法声明返回不可为空引用类型(可能是尚未使用为空性修饰符进行更新库)或错误返回空值(可能是警告被忽略),或抛出非致命异常且未执行预期分配,那么不可为空引用类型最终仍可能会分配有空值。

15120

Django中使用Json返回数据实现方法

在Django中,使用JSON传输数据,有两种方式,一种是使用PythonJSON包,一种是使用DjangoJsonResponse 方法一:使用PythonJSON包 from django.shortcuts...有中文都是乱码了? 不着急,这不是乱码,这是中文在内存中二进制表现形式而已,使用JSON转换工具可以看到中文。...方法二:使用JsonResponse进行传输。...有时我们从数据库取出来数据,很多是列表类型,特别是用cx_Oracle包在Oracle数据库取出来数据,其不支持直接字典输出,输出就是一个list,这时我们使用JsonResponse(data...到此这篇关于Django中使用Json返回数据实现方法文章就介绍到这了,更多相关Django Json返回数据内容请搜索ZaLou.Cn

1.6K10

c#值类型与引用类型区别

该类型提供了与System.Object相同方法,但System.ValueType重写了Equals方法, 能在两个对象自断值完全匹配前提下返回true。...由于不能将值类型作为基类型来定义新值类型或者新引用类型,所以不应在值类型中引用任何新方法。所以方法都不能是抽象,所以方法都隐式密封(不可重写)。....由于不能将值类型作为基类型来定义新值类型或者新引用类型,所以不应在值类型中引用任何新方法。所以方法都不能是抽象,所以方法都隐式密封(不可重写)。.引用类型变量包含堆中对象地址。...引用类型变量创建时默认初始化为null,表明当前不指向有效对象。试图使用null引用类型变量会抛出NullReferenceException异常。...相反,值类型变量总是包含其基础类型一个值,而且值类型所有成员都初始化为0。值类型变量不是指针,访问值类型不可能抛出NullReferenceException异常。

77520

测试 ASP.NET Core API Controller

每组测试数据都会走一遍构造函数. 该测试方法使用是Theory, 用了4组数据....看它POST Action方法, 很多地方需要被测试: ? 测试ModelState 首先可以测试product为null情况, 但是这个太简单了, 我就不啰嗦了....测试特定方法会被调用 这里需要使用moq了, 为了让被测试方法顺利跑完, 我设定Mock版UnitOfWorkSaveAsync()方法返回true, (注意这个方法返回类型是Task<bool...模拟SaveAsync()后实体数据 该项目使用是EFCore, 在_unitOfWorkSaveAsync()之后, 变量productModelId就会有非0值了, 也就是说productModel...针对这种情况, 我们可以使用moqCallback()功能: ? 刚开始为autoMapper两次map动作设定了返回值.

2.3K40

Moq基础(三)

上一章区分了下stub,和mock 这一章我们的确要开始讲moqapi了 ---- Setup系列 Setup系列函数用于伪造特定方法返回值。...当然这个方法也会包含属性方法 Setup:伪造方法 setup伪造方法返回格式为伪对象.Setup(fake=>fake.方法名).Returns(返回值) 这里用moq官方文档中接口为例 public...OK呀,不过这里我们不能用Return,这里我们引入一个新格式,抛出异常 setup伪造方法抛出异常格式为伪对象.Setup(fake=>fake.方法名).Throws(异常对象) 或者伪对象.Setup...("you must do something to make you slim")); 此外我们还常常遇到连续调用同一方法返回值不同情况,例如第一次"fitness"是返回"fitness makes...欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io ),不得用于商业目的,基于本文修改后作品务必以相同许可发布。

1K20
领券