架构守护
在重构的过程中,我们也可以尝试将它引入到系统中使用。它可以作为我们的架构适应度函数,不断地见证我们架构的变化和成长 —— 以一种肉眼的方式持续演进。
架构守护测试
ArchUnit 是一个不错的架构守护框架。你可以尝试引入项目的架构中,
坏味道守护
我的意思是,只需要集成到持续构建中即可。
测试驱动开发
测试驱动开发适合于解决复杂的问题。
我并不是一个 TDD 的死忠粉,但是我发现 TDD 非常适合于解决复杂问题。在这个场景下,我有一堆事先准备好的 Test Bad Smell,它们拥有一些对应的检测规则,这些规则相互之间存在一些影响。因此,我将这些 Bad Smell 作为我的测试用例:
AssertionRouletteTest.java
ConditionalTest.java
ConstructorInitializationTest.java
DuplicateAssertTest.java
EmptyTest.java
IgnoreTest.java
MagicNumberTest.java
MysteryGuestTest.java
RedundantAssertionTest.java
于是,我可以写出我的第一个测试:
func TestTbsApp_EmptyTest(t *testing.T) {
g := NewGomegaWithT(t)
var codePath = "../../../_fixtures/tbs/code/EmptyTest.java"
var result = buildTbsResult(codePath)
g.Expect(result[0].Type).To(Equal("EmptyTest"))
}
对应的一步步完成出整个功能的代码。而后,我们就可以重构出理想的代码 —— 因为我们已经有了对应的测试。
下一节:我们把所有的问题都归到人的问题。