使用TDD原则做到这一点的正确方法是什么?
问题描述:
我是TDD的新手,我正在努力学习正确的做事方式。所以我必须为Web浏览器扩展创建一个JavaScript类,它将用户的信息存储到HTML5的localStorage
(我将称这个类为UserInfoStorage
)。但是,我想让我的扩展程序跨浏览器兼容,并且与localStorage
进行交互的方式在各种浏览器(Chrome,Firefox,Safari)中有所不同。使用TDD原则做到这一点的正确方法是什么?
我应该创建另一个类Storage
,它是针对每个浏览器的,并且UserInfoStorage
用这个来存储东西到localStorage
?我将如何进行单元测试而不将UserInfoStorage
的测试与Storage
的实施结合起来?
谢谢!
答
我意识到,要做到这一点,最好的办法是创建一个测试Storage
具有基本get
和set
功能(有点像一个测试数据库),并有UserInfoStorage
使用它来存储和检索数据。这允许直接测试UserInfoStorage
的接口,而不需要将其与Storage
绑定,所以如果我改变UserInfoStorage
的工作方式,测试仍然有效(因为它们没有测试UserInfoStorage
是否正确地与Storage
交互,而是UserInfoStorage
的功能产生期望的结果)。
答
一般而言,您可以模拟被测试的存储以确保UserInfoStorage正确地与其交互。这些将包含(部分)UserInfoStorage上的单元测试。然后,您将针对每个浏览器的每个存储实现单独进行单元测试,并且理想情况下还会测试代码,以确定根据涉及的浏览器提供哪个存储实施。