改造单元测试解决方案大,国际奥委会,起订量(Retrofit unit tests to large

2019-09-30 08:28发布

我在改造单元测试写在VB.Net和C#中asp.net解决方案的过程。 单元测试需要验证目前的功能并作为未来重大更改的支票。

该解决方案包括:

写在vb.net 1个MVC Web项目(别问了,这是一个传统的东西)

其他10个配套项目C#编写的每个包含逻辑分组的功能性,每个项目包含库和DAL

所有的类是紧耦合的,因为没有任何地方实现控制反转(IOC),尚未。

目前测试的控制器有下面的堆栈:

  • 调节器
    • 知识库
      • DAL
        • 记录

第一个问题,单元测试这个正确将我安装1测试项目,并从它运行所有测试,或者我应该设置1测试项目为每个项目只测试该DLL的功能?

第二个问题,我需要实现国际奥委会能够使用最小起订量?

第三个问题,是它甚至有可能重构国际奥委会成这样一个巨大的解决方案?

第四个问题,还有什么其他选项可用来得到这个做尽快解决?

Answer 1:

我在改造单元测试写在VB.Net和C#中asp.net解决方案的过程。 单元测试需要验证目前的功能并作为未来重大更改的支票。

当与没有单元测试,并没有被写入在考虑测试一个大的代码基础工作,有一个很好的机会,为了编写单元测试的一组有用,你将不得不修改代码,因此你会被触发,你在编写单元测试,以保障规划的事件。 这显然是有风险的,但可能没有任何比你已经做在日常工作中风险较高。

有很多的,你可以采取(并有一个很好的机会,这个问题将被关闭太宽)的方法。 一种方法是建立一套良好的集成测试,确保核心功能是否正常。 这些测试将不会像快作为单元测试运行,但他们会从旧代码库进行进一步分离。 这会给你一个很好的安全网,你需要做的引入单元测试的一部分的任何变化。

如果你有Visual Studio中的一个合适的版本,那么您可能还可以使用垫片 (或者,如果你有资金,typemock可能是一种选择)编写的初步测试时,隔离应用程序的元素。 因此,例如,您可以创建你的DAL你的代码的其余部分从DB隔离的垫片。

第一个问题,单元测试这个正确的,我会设置1测试项目,并从它运行所有测试,或者我应该设置1测试项目为每个项目只测试该DLL的功能?

就个人而言,我更喜欢认为每个组件作为一个可测试单元的,所以往往造成用于容纳生产代码中的每个组件的至少一个测试项目。 无论是有道理的,虽然,要看是什么包含在每个组件的有点......我还往往有顶级项目的集成测试至少一个测试项目。

第二个问题,我需要实现国际奥委会能够使用最小起订量?

简短的回答是否定的,但要看你的班级做。 如果你想使用起订量来测试的话,那当然更容易做,如果你的类支持依赖注入,虽然你并不需要使用IOC容器来实现这一目标。 手卷注射或者通过构造如以下,或者通过属性可以形成桥,以允许测试存根被注入。

public SomeConstructor(ISomeDependency someDependency = null) {
    if(null == someDependency) {
        someDependency = new SomeDependency();
    }
    _someDependency = someDependency;
}

第三个问题,是它甚至有可能重构国际奥委会为这样一个巨大的解决方案?

是的,它是可能的。 更大的问题是它值得吗? 你似乎在暗示一个大爆炸的方法来进行迁移。 如果你有一个团队没有这方面的很多经验的开发人员,这似乎是非常危险的。 一个更安全的办法可能是针对特定的应用领域并迁移部分。 如果你的组件是离散的,就应该在你的应用形成相当容易分割点。 了解什么可行,什么不可行,用你的感觉有什么好处和意想不到的疼痛沿。 用它来告诉你如何以及何时迁移代码的其余部分决定。

第四个问题,还有什么其他选项可用来得到这个做尽快解决?

正如我上面所说的,我不知道ASAP是真的采取正确的方法。 对单元测试工作可以做一个缓慢的迁移,添加测试和你实际的代码变化,由于业务需求。 这有助于确保测试人员也被分配给赶上你介绍的,可能需要采取地方支持测试重构的一部分的任何错误。



文章来源: Retrofit unit tests to large solution, IOC, Moq