Scala / Lift:如何编写测试代码段对不同参数的响应的单元测试
我正在尝试编写一个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" } } } 编辑:清晰度 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |