如何以正确的方式使用 Ninject 测试 .net 项目
本文关键字:Ninject 测试 net 项目 方式使 | 更新日期: 2023-09-27 18:36:16
我们有一个具有分离业务层的项目。这就像解决方案中单独项目中的许多服务(类)。此外,我们使用 ninject 来管理依赖项。商业项目中的所有类都是内部的,它通过接口与"另一个世界"进行通信。如果要创建包含测试的新项目,则它不会看到内部类(但是是的,我们可以进行黑客攻击并在AsseblyInfo中将内部声明为公共)。
我真正需要知道的是测试所必需的内容:
-
我们可以创建所有内容的测试环境,并且只能通过生成的接口进行测试(没有"明确"的DAL,我们正在使用linq2sql,但它可能会被嘲笑)这种方式看起来很不错,因为我们对内部 BisLayer 结构一无所知,只测试"合约"功能。但不好的一面是,该系统有很多选项、设置和绑定,似乎不可能或很难检查它的所有可能变体
-
我们可以将测试放在同一个项目或 set 属性中,使内部被视为公共,这样我们就能够测试内部类。它很好,因为我们几乎可以测试所有内容,但是很难控制绑定,因为Ninject这样做会很好,我们只会覆盖我们在混凝土测试中需要的绑定。也不清楚如何测试实现相同接口(并执行类似操作)的类。就像我们很少有缓存的实现一样,但每个 impl-tion 将数据保存在不同的地方(mssql、键值 db、asp 缓存等),因此每个实现的测试实际上是相同的
正如您所说,您需要访问这些类才能进行测试。因此,仅使暴露于外部槽接口的内部结构可从外部访问。
只针对暴露在外部的行为来编写测试,你称之为"另一个世界"。首先编写更通用的测试用例,然后根据需要详细介绍。由于这将是一个持续的过程,以及实际功能的开发/更改,因此您将能够决定实际需要多少细粒度方案。
另请查看 Ninject 模拟内核扩展 https://github.com/ninject/ninject.mockingkernel