C# 如何在重构之前添加高级测试以锁定行为?
我有一个中等规模、高度混乱、杂乱无章的大泥球项目,我想重构它。大约有5万行代码,我是唯一的维护者。一个类是10k LOC长,线宽为400个字符。功能仍在添加中,尽管速度很慢。我对重构部分感觉很好。撕碎代码对我来说很舒服。然而,围绕应用程序进行一系列测试以确保我不会破坏它似乎让人望而生畏。巨大的对象图和模拟所有数据库将是真正的麻烦。我可能可以在不破坏东西的情况下进行大规模重构。但是,谨慎要求进行一定程度的测试,以确保至少一定程度的安全性。同时,我不想花太多时间在代码周围进行一组“行为锁定”测试。我完全打算在事情稍微解耦后添加一整套单元测试。重写是不可能的C# 如何在重构之前添加高级测试以锁定行为?,c#,unit-testing,refactoring,C#,Unit Testing,Refactoring,我有一个中等规模、高度混乱、杂乱无章的大泥球项目,我想重构它。大约有5万行代码,我是唯一的维护者。一个类是10k LOC长,线宽为400个字符。功能仍在添加中,尽管速度很慢。我对重构部分感觉很好。撕碎代码对我来说很舒服。然而,围绕应用程序进行一系列测试以确保我不会破坏它似乎让人望而生畏。巨大的对象图和模拟所有数据库将是真正的麻烦。我可能可以在不破坏东西的情况下进行大规模重构。但是,谨慎要求进行一定程度的测试,以确保至少一定程度的安全性。同时,我不想花太多时间在代码周围进行一组“行为锁定”测试。我
有人有什么建议或技巧吗?以前有人做过这种事吗?心态 一般来说,为没有考虑可测试性的应用程序编写自动化测试(甚至是高级测试)可能会很困难 最好的事情是确保在重构时编写测试是有纪律的(听起来像是有意的)。这将慢慢地把代码球变成一个优雅的舞蹈独角兽,它包含封装良好的可测试类 建议 从创建一些手动高级测试开始(例如,用户进入第一页,单击红色按钮,然后出现一个文本框…)以获得一个起点。根据应用程序内置的技术,有一些框架可以帮助自动化这些高级(通常是UI驱动的)测试: 对于web应用程序是一个很好的选择,对于WPF应用程序,您可以使用,对于其他应用程序,虽然它有点初级,但可以成为一个救生圈 > P>这里我是如何在C++(和C)中实现的。p>
这可能属于程序员,但无论如何:无论你做什么,这都是一种痛苦。我建议从最安全的地方开始,在做任何改变之前仔细测试。测试将是痛苦和丰富的,但就是这样,否则就不做了。我会在瓶颈处开始重构——也许有一个特定的类访问数据库?然后从那里构建测试。重构时间可能比在(可能)不稳定的结构上进行测试要有用900%。