使用TDD原则做到这一点的正确方法是什么?

问题描述:

我是TDD的新手,我正在努力学习正确的做事方式。所以我必须为Web浏览器扩展创建一个JavaScript类,它将用户的信息存储到HTML5的localStorage(我将称这个类为UserInfoStorage)。但是,我想让我的扩展程序跨浏览器兼容,并且与localStorage进行交互的方式在各种浏览器(Chrome,Firefox,Safari)中有所不同。使用TDD原则做到这一点的正确方法是什么?

我应该创建另一个类Storage,它是针对每个浏览器的,并且UserInfoStorage用这个来存储东西到localStorage?我将如何进行单元测试而不将UserInfoStorage的测试与Storage的实施结合起来?

谢谢!

我意识到,要做到这一点,最好的办法是创建一个测试Storage具有基本getset功能(有点像一个测试数据库),并有UserInfoStorage使用它来存储和检索数据。这允许直接测试UserInfoStorage的接口,而不需要将其与Storage绑定,所以如果我改变UserInfoStorage的工作方式,测试仍然有效(因为它们没有测试UserInfoStorage是否正确地与Storage交互,而是UserInfoStorage的功能产生期望的结果)。

一般而言,您可以模拟被测试的存储以确保UserInfoStorage正确地与其交互。这些将包含(部分)UserInfoStorage上的单元测试。然后,您将针对每个浏览器的每个存储实现单独进行单元测试,并且理想情况下还会测试代码,以确定根据涉及的浏览器提供哪个存储实施。