当前位置: 首页 > 知识库问答 >
问题:

用Moq模拟内部类进行单元测试

路伟
2023-03-14

如果我错了请纠正我,但看起来Moq只能模拟一个公共类,它有一个公共的无参数构造函数,要模拟的方法是public virtual。我并不想让这些类公开可见。我是不是错过了一些与Moq的东西,或者只是不适合我想做的事情?

我想我可以创建一个ClassB实现的接口(例如“ICLASSB”),将其注入ClassA,并模拟该接口。ClassB仍然可以是内部的(尽管我意识到接口方法必须是公共的)。虽然这可以工作,但我对创建大量接口感到不安,这些接口的唯一目的是支持单元测试模拟。思想?

共有1个答案

冯育
2023-03-14

通过在项目的Assembly.cs中添加InternalsVisibleToAttribute,可以使内部对Moq可见,如下所示:

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]

为什么“DynamicProxygenAssembly2”而不是“Moq”?它是为包含动态生成的代理类型而创建的动态程序集的名称(所有这些都由MoQ使用的另一个库Castle的DynamicProxy处理)。因此,您将类型公开给动态代理程序集,而不是Moq本身。

但是,如果没有可重写的成员,那么嘲笑类又有什么意义呢?您不会模仿任何东西,所有调用都将使用实际实现。你的第二个解决方案,

 类似资料:
  • 问题内容: 我正在尝试为一些依赖WifiManager和返回的ScanResults的类实现一些单元测试。我想做的是能够控制我收到的ScanResults,以测试各种不同的条件。 不幸的是,对我来说,成功模拟WifiManager非常困难(尽管我想我可以在MockWifiManager中传递其构造函数null引用)。这只是我的第一个问题,因为一旦我有一个MockWifiManager可以玩(如果它

  • 我试图用模拟的dbcontext为我的服务创建一个单元测试。我创建了一个接口,具有以下函数:

  • 我有一个示例方法(我需要编写测试用例)如下所示, 我想模拟getConfig方法并返回一个特定的字符串值。getConfig是Kotlin对象中方法,如下所示, 下面是我尝试的测试 我没有得到任何错误,但是getConfig方法没有被嘲笑。执行实际的实现。我也试过使用Powermockito。请帮帮我

  • 问题内容: 我在解决如何使用Apache Mina时遇到了一些麻烦。他们的文档对于我那才华横溢的大脑来说有点乏味。我在Java SFTP服务器库中看到了有用的起始代码 吗? 我不知道如何使用它。我想使用Mina作为一种模拟服务器来设置检查我的sftp代码的单元测试,即能够编写如下单元测试: 问题是要放入什么。 我一直在浏览测试代码,想知道是否需要在上面进行更多配置以指定根目录,用户名和身份验证密钥

  • 所以我有三个类:A、B、C。我需要为类编写单元测试。 因此,C是一种重要的资源(如JDBC或ssh会话)。当然,我在嘲笑C。如何模拟B。想象一下,B有许多扩展它的子类。 我的主要问题是A正在调用super。(...) 。我不想仅仅为了测试而将方法注入到A中。对我来说,这是个糟糕的设计。有没有办法嘲笑父母? 例如,我不能执行类MockB扩展B{…} 然后尝试

  • 我用Mockito进行了Java测试: Kotlin.TypeCastException:null不能强制转换为非null类型java.util.HashMap 如何正确模拟属性?