如何对内部优化逻辑进行单元测试,而这种内部优化逻辑不会改变某个类的公共行为,但是如果要确保它的工作正常,那么它是否足够复杂?
例如,假设我有一个FooStore
类insert(Foo foo)
和getByProperty(Property)
方法。
如果你正在进行测试驱动开发,你首先会编写一些失败的插入和检索单元测试,然后编写代码FooStore
,直到测试通过。
如果您稍后意识到可以在FooStore
中构建一些内部数据结构,那么插入或检索要快得多。但由于insert
或getByProperty
的行为没有变化,您将如何首先编写失败的单元测试?您将如何编写测试以确保新逻辑实际上更快地执行?
答案 0 :(得分:2)
如何对不改变类的公共行为的内部优化逻辑进行单元测试
通过测试班级的公共行为。
你所谈论的不是新功能,而是重构。重构依赖于现有测试,而不是创建新测试。如果您想出一种更好的方法来开发代码而不改变公共行为,那么您就不会更改测试。实际上,测试的值是这样的,你可以完全按照你正在做的事情而不用担心破坏类的公共行为,因为你可以依靠测试来验证这种行为。 / p>
在TDD的“红色,绿色,重构”循环中,您处于“重构”步骤。
你可以编写性能测试,它可能使用与单元测试相同的技术,但从代码组织的角度来看,我建议将它们分开。这些测试不会验证功能,他们只是测量性能。在测试的“安排,行动,断言”步骤中,性能测试不一定是“断言”,而是“报告”结果。 (他们可能会“断言”结果达到最低阈值,但除此之外,性能测试没有真正的失败,只有报告的测量。)