假设我有一些Manager类,需要通过删除代码来更改现有功能。
管理器总是在建立连接后发送初始消息以执行操作,例如clearInitialData()。我必须删除此初始发送。
在这个类的单元测试套件中,大约有30个测试。Unittest风格是一种集成测试,但带有模拟。
然而,除了testCreation()之外的每个单元测试都依赖于这个测试用例“testInitialDataCleared()”,它测试初始发送是否完成。然而,这正是我需要删除的行为。
我在如何开始这方面有点困难,所以我的方法是:
进行新的测试,确保清除的初始数据不会完成
删除了2个明显过时的测试用例,因为它们只是测试这种初始清除步骤
运行所有测试。正如所料,我自己的新测试在旧测试通过的地方失败了。
编辑现有测试以依赖于我创建的新测试用例。这似乎是一件合理的事情,因为之前这些测试都是在假定会有初始清算发送的情况下开始的
查看更多测试失败
做我认为会实现的修复。从实现中删除代码。
现在我看到断言从业务逻辑中失败了,并且由于核心从断言中转储(使用googletest/mock-btw),所有测试用例都无法完成运行。
不确定这是否是最好的TDD实践,也许我的实现修复有点过于侵入。无论如何,我可能需要在调试器中运行测试,以找出到底出了什么问题。
你有过类似的开发问题吗?你有什么好的建议吗?
结论和college一起看了一眼。实际的业务逻辑实现删除非常可靠。导致测试断言的原因是uut确实保持了静态状态。我的新单元测试将uut运行到一个意外的状态,因此其他测试中的一个具有此断言。所以基本上,由于静态数据的原因,我忘记了在新添加的单元测试结束时进行重置。所以基本上,我在谷歌测试中把测试作为单独的测试用例,这引起了问题。
在单元测试端我们的想法是用测试助手替换所有testInitialDataCleared(),而测试助手什么也没做。两个旧的行为单元测试被明确删除。