Unit testing 带TDD的单元测试内部优化逻辑

Unit testing 带TDD的单元测试内部优化逻辑,unit-testing,Unit Testing,您如何对内部优化逻辑进行单元测试?内部优化逻辑不会改变类的公共行为,但在您希望确保其正常工作的地方已经足够复杂了 例如,假设我有一个类FooStore,它有insert(Foo-Foo)和getByProperty(Property)方法 如果您正在进行测试驱动的开发,那么您将首先编写一些失败的插入和检索单元测试,然后编写代码FooStore,直到测试通过 如果您以后意识到可以在FooStore中构建一些内部数据结构,那么插入或检索会更快。但是既然insert或getByProperty的行为没

您如何对内部优化逻辑进行单元测试?内部优化逻辑不会改变类的公共行为,但在您希望确保其正常工作的地方已经足够复杂了

例如,假设我有一个类
FooStore
,它有
insert(Foo-Foo)
getByProperty(Property)
方法

如果您正在进行测试驱动的开发,那么您将首先编写一些失败的插入和检索单元测试,然后编写代码
FooStore
,直到测试通过

如果您以后意识到可以在
FooStore
中构建一些内部数据结构,那么插入或检索会更快。但是既然
insert
getByProperty
的行为没有改变,那么您如何首先编写一个失败的单元测试呢?您将如何编写测试来确保新逻辑的实际执行速度更快

如何对内部优化逻辑进行单元测试,使其不改变类的公共行为

通过测试班级的公众行为

你说的不是新特性,而是重构。重构依赖于现有的测试,而不是创建新的测试。如果您想出了一种更好的方法来开发代码,而不改变公共行为,那么您就不会改变测试。事实上,测试的价值在于,您可以准确地执行您正在执行的操作,而不必担心破坏类的公共行为,因为您可以依靠测试来验证该行为

在TDD的“红、绿、重构”循环中,您处于“重构”步骤



您可以编写性能测试,它可能使用与单元测试相同的技术,但从代码组织的角度来看,我建议将它们分开。这些测试不会验证功能,它们只是测量性能。在测试的“安排、执行、断言”步骤中,性能测试不一定“断言”,而是“报告”结果。(他们可能会“断言”结果符合最低阈值,但除了性能测试没有真正的失败,只有报告的测量之外。)

在TDD的红色和绿色阶段,人们非常强调编写最少的代码来通过单元测试,而不是编写任何代码,除非测试失败。然后在重构阶段,只要测试仍然通过,所有的编码都是免费的。@Wei:嗯,即使重构极简主义仍然是个好主意。写复杂的代码、TDD或其他东西没有多大意义。