加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala / Lift:如何编写测试代码段对不同参数的响应的单元测试

发布时间:2020-12-16 09:18:32 所属栏目:安全 来源:网络整理
导读:我正在尝试编写一个Specs2测试,它会测试代码段的输出,以响应通常从模板传递的不同参数,但是我还没有弄清楚如何做. 例如,在这个div中的代码段标注: div class="lift:Snippet.method?param1=foo"/div 我将参数param1传递给代码段.我的代码片段将如下所示: cl
我正在尝试编写一个Specs2测试,它会测试代码段的输出,以响应通常从模板传递的不同参数,但是我还没有弄清楚如何做.

例如,在这个div中的代码段标注:

<div class="lift:Snippet.method?param1=foo"></div>

我将参数param1传递给代码段.我的代码片段将如下所示:

class Snippet {
  def method(in:NodeSeq):NodeSeq = {
    val param1 = S.attr("param1") openOr ""
    param1 match {
      case "foo" => //do something
      case "bar" => //do something else
      case _ => //do yet another thing
    }
  }
}

所以在我的测试中,我想测试代码段如何响应不同的param1值

class SnippetTest extends Specification {
  "Snippet" should {
    "do something" in {
      val html = <ul>
          <li class="first">
          <li class="second">
          <li class="third">
        </ul>

      //I need to set param1 here somehow
      val out = Snippet.method(html)
      //then check that it did what it was supposed to
      out.something must be "xyz"
    }
  }
}

如何设置param1?

我是一个大时间的scala和提升新手(来自python django),所以如果我正在树上错误的树,请指示我正确的一个.我认为可能是这样,我一直在谷歌搜索,没有发现任何远程类似于这一个问题.

谢谢,

布莱克

解决方法

好的,我已经弄清楚了.这个问题没有太多的兴趣,但是如果有人出现在同一个问题/问题上的谷歌搜索,这里是你如何做的:

Lift的“S”对象需要添加我们的任意属性,以便它会在我们的代码片段提供我们想要测试的属性.不幸的是,有2个问题.首先,“S”对象仅在接收到http请求时初始化.其次,萨特尔是不可改变的.

Lift有一个名为mockweb的包,它允许您制作模拟http请求.该软件包的文档通常涉及测试会话和用户登录,而且还提供了将“S”初始化为规范测试的一部分的机制.

第一个问题,初始化S,通过将我们的测试类定义为WebSpec的扩展而不是规范来解决(WebSpec是mockweb包的一部分并扩展规范),并在规范定义期间调用“withSFor”,这将初始化“S “

处理S.attr是不可变的第二个问题是用“S”方法“withAttrs”来解决. “withAttrs”执行您提供的代码块,它们都是常规的属性,以及您在地图中提供的属性.您的任意属性只能从S.attr临时提供

这是从我原来的问题的测试,已经被修改以解决2个问题:

import net.liftweb.mockweb._

class SnippetTest extends WebSpec {
  "Snippet" should {
    "do something" withSFor("/") in {
      val html = <ul>
          <li class="first">
          <li class="second">
          <li class="third">
        </ul>

      //here I set param1
      var m = new HashMap[String,String]
      m += "param1" -> "foo"

      val s = new Snippet()

      //then tell S to execute this block of code
      //with my arbitrary attributes.
      //'out' will be the NodeSeq returned by s.method
      val out = S.withAttrs(S.mapToAttrs(m)){
        s.method(html)
      }

      //then check that it did what it was supposed to
      out.something must be "xyz"
    }
  }
}

编辑:清晰度

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读