首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为功能代码编写测试?

为功能代码编写测试?
EN

Stack Overflow用户
提问于 2015-04-08 19:42:37
回答 1查看 37关注 0票数 0

举个例子,假设我们正在构建一个简单的缓存。我们可以使用闭包来使用函数方法:

代码语言:javascript
复制
makeCache = ->
  c = {}
  (key, fetch) ->
    if c[key]
      c[key]
    else
      c[key] = fetch()
      c[key]

cache = makeCache()
cache(1, -> 1)

我发现这种方法的问题是您不能很容易地测试它。我希望能够检查'1'是否在缓存中。如果我添加了更多的值,我希望确保它们也在缓存中。

如果我有一个更复杂的缓存,比如LRU缓存,我也想测试其他方面。然而,这些变量完全隐藏在闭包后面。

我倾向于想出使用闭包的解决方案,但随后我求助于面向对象的风格,以便它的可测试性:

代码语言:javascript
复制
class Cache
  constructor: ->
    @c = {}
  get: (key, fetch) ->
    if c[key]
      c[key]
    else
      c[key] = fetch()
      c[key]

cache = new Cache()
cache.get(1, ->1)

现在,我可以访问cache.c和需要检查的任何其他变量来进行测试。

因此,我的问题是,在使用函数样式闭包时,如何测试代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-08 19:56:08

这不是检验你的具体情况吗?

代码语言:javascript
复制
cache = new Cache()
cache.get(1, ->1)
expect(cache.get(1, ->0)).toBe(1);

更普遍的问题是足够真实的。但任何封装技术都是如此。不过,我认为,测试的整个目标,或者至少是单元测试,是为了工作一个系统的公共接口。因此,如果您没有公共工具来检查缓存中是否存在某种东西,那么您就不需要对其进行单元测试。

当然,有些人不同意这一点,但我认为这是一条鲜明的分界线。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29523951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档