如何以适当的方式使用Ninject测试.net项目

时间:2012-06-05 16:23:02

标签: c# unit-testing ninject

我们有一个分开的商务层的项目。这就像解决方案中分离项目中的许多服务(类)一样。我们还使用ninject来管理依赖性。 商业项目中的所有课程都是内部的,它通过界面与“另一个世界”进行交流。 如果要创建包含测试的新项目,那么它就不会看到内部类(但是我​​们可以做一个hack并在AsseblyInfo中声明Internal to Public)。

我真正需要知道的是测试的必要条件:

  1. 我们可以创建所有内容的测试环境,并且只通过生成的接口进行测试(没有«clear»DAL,我们使用linq2sql,但它可能被模拟) 这种方式看起来像商品,因为我们对内部BisLayer结构一无所知,只测试«合同»功能。但不好的一面是系统有很多选项,设置和绑定,看起来不可能或很难检查它的所有可能的变种

  2. 我们可以在同一个项目中设置测试或设置属性以使内部被视为公共,因此我们可以测试内部类。它很好,因为我们可以测试几乎所有东西,但它很难控制绑定,因为它很好Ninject这样做,我们只会覆盖我们在混凝土测试中需要的绑定。 还不清楚如何测试实现相同接口的类(以及做类似的事情)。就像我们几乎没有Cache的实现,但每个impl-tion将数据保存在不同的地方(mssql,键值db,asp缓存等),所以每个实现的测试实际上都是相同的

1 个答案:

答案 0 :(得分:3)

正如您所说,您需要访问这些类才能进行测试。因此,只能从外部访问暴露于外部槽接口的内部构件。

仅针对暴露于外部的行为,即您所称的“另一个世界”来编写测试。 首先编写更通用的测试用例,然后根据需要详细说明。 由于这将是一个持续的过程以及实际功能的开发/更改,您将能够决定实际需要多少细粒度场景。

另请参阅Ninject Mocking内核扩展https://github.com/ninject/ninject.mockingkernel