.net - 如何模拟类的内部方法?

标签 .net unit-testing moq

我有一个具有内部方法的类,我想模拟内部方法。但我无法模拟它,即它不是调用模拟函数而是调用原始函数。有没有办法做到这一点?

编辑:实际上我是 Moq 的新手。我有许多类和类的方法要使用 Moq 进行测试。许多类是内部的,许多具有内部方法,许多具有非虚拟方法。并且不能更改方法和类上的签名。谁能告诉我如何使用 Moq 来测试这个场景。或者请向我推荐一些其他易于学习且易于使用的测试框架。

最佳答案

您可以通过将以下内容添加到您的 AssemblyInfo.cs 来轻松模拟内部虚拟方法:

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] // namespace in Moq
[assembly: InternalsVisibleTo("YourTestClass")]

如果您的程序集被强命名,您需要包含 DynamicProxyGenAssembly2 的公钥(感谢@bvgheluwe 的评论;来源:Moq quickstart guide):
[assembly:InternalsVisibleTo("DynamicProxyGenAssembly2,PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]

我不明白为什么接受的答案说你永远不应该这样做。当您使用 Roy Osherove 在 Chapter 3 of The Art Of Unit Testing 中概述的“提取和覆盖”(本地工厂方法)依赖注入(inject)技术时,您所做的不就是这样吗? ?

关于.net - 如何模拟类的内部方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2772621/

相关文章:

.net - 在 .NET 中通过 Process.Start 生成的进程会挂起线程

javascript - 测试 Angular Controller 定义如 angular.module ('myApp' ).controller(

unit-testing - NSubstitute,在接收到的调用中使用对象作为参数

c# - 采用 Func<T> 的模拟方法

unit-testing - Moq-ing 类或接口(interface)有什么区别?

c# - 引用项目中的命名空间在构建前出现在自动完成中,但在构建后导致编译错误

C# 从文本框中禁用默认的 Windows contextstrip

c# - 在 Windows 窗体中的文本标签中输入 "&"符号?

java - EclEmma(Jacoco) 显示未覆盖的行,即使该行已执行

c# - Drawing.Image 不允许在起订量或单元测试中使用?