我一直在阅读Test Driven Development: By Example几周。现在,我坚持第31章 - 重构。我的问题是关于迁移数据的信息,请参阅第183页。我不明白这个主题。关于TestSuite
的示例也无法帮助我理解这一点。
我想知道迁移数据意味着什么,以及如何在TDD中使用它。
[更新] 书中的内容
迁移数据
你如何摆脱一种表现形式?暂时复制数据。
如何: 这是内部到外部版本,您可以在其中更改内部表示 然后更改外部可见界面:
但有时候,您希望首先更改API。然后你应该: - 以新格式添加参数 - 从新格式参数转换为旧格式内部表示 - 删除旧格式参数 - 用旧格式替换旧格式的使用 - 删除旧格式
为什么: 一对多每次都会产生数据迁移问题。假设我们想要 使用One to Many实现TestSuite。我们将从:
开始def testSuite(self):
suite= TestSuite()
suite.add(WasRun("testMethod"))
suite.run(self.result)
assert("1 run, 0 failed" == self.result.summary())
通过以下方式实现(在One to Many的“One”部分中):
class TestSuite:
def add(self, test):
self.test= test
def run(self, result):
self.test.run(result)
现在我们开始复制数据。首先,我们初始化测试集合:
TestSuite
def __init__(self):
self.tests= []
Everywhere “test” is set, we add to the collection, too:
TestSuite
def add(self, test):
self.test= test
self.tests.append(test)
现在我们使用测试列表而不是单个测试。出于当前的目的 测试用例这是一个重构(它保留了语义),因为只有一个 集合中的元素。
TestSuite
def run(self, result):
for test in self.tests:
test.run(result)
我们删除现在未使用的实例变量“test”:
TestSuite
def add(self, test):
self.tests.append(test)
在等效格式之间移动时,您还可以使用逐步数据迁移 使用不同的协议,如从Java的Vector / Enumerator转移到Collection / 迭代器。
答案 0 :(得分:0)
这是一种重构,您希望更改数据的表示方式。
正如书中所说, 示例正在从一个变为多个,例如你已经为一个测试做了一个场景,现在你想改进它以处理N个测试。所以现在你必须将数据表示从Test实例变量改为(迁移)到List<Test>
。进行此更改可以从内到外或从外到内的方式逐步完成