当前位置:K88软件开发文章中心编程语言SQLscala → 文章内容

简单构建工具

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-19 4:45:31

是一个 SBT 类。在上面例子中,我们扩展了 SBT 的 DefaultProject。这里是通过 val 声明依赖。SBT 使用反射来扫描项目中的所有 val 依赖,并在构建时建立依赖关系树。这里使用的语法可能是新的,但本质和 Maven 依赖是相同的<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.6.1</version></dependency><dependency> <groupId>org.scala-tools.testing</groupId> <artifactId>specs_2.8.0</artifactId> <version>1.6.5</version> <scope>test</scope></dependency>现在可以下载我们的项目依赖了。在命令行中(而不是 sbt console 中)运行 sbt update[local ~/projects/sbt-sample]$ sbt update[info] Building project sample 1.0-SNAPSHOT against Scala 2.8.1[info] using SampleProject with sbt 0.7.4 and Scala 2.7.7[info] [info] == update ==[info] :: retrieving :: com.twitter#sample_2.8.1 [sync][info] confs: [compile, runtime, test, provided, system, optional, sources, javadoc][info] 1 artifacts copied, 0 already retrieved (2785kB/71ms)[info] == update ==[success] Successful.[info] [info] Total time: 1 s, completed Nov 24, 2010 8:47:26 AM[info] [info] Total session time: 2 s, completed Nov 24, 2010 8:47:26 AM[success] Build completed successfully.你会看到 sbt 检索到 specs 库。现在还增加了一个 lib_managed 目录,并且在 lib_managed/scala_2.8.1/test目录中包含 specs_2.8.0-1.6.5.jar添加测试现在有了测试库,可以把下面的测试代码写入src/test/scala/com/twitter/sample/SimpleParserSpec.scala文件package com.twitter.sampleimport org.specs._object SimpleParserSpec extends Specification { "SimpleParser" should { val parser = new SimpleParser() "work with basic tweet" in { val tweet = """{"id":1,"text":"foo"}""" parser.parse(tweet) match { case Some(parsed) => { parsed.text must be_==("foo") parsed.id must be_==(1) } case _ => fail("didn't parse tweet") } } }}在 SBT 控制台中运行 test> test[info] [info] == compile ==[info] Source analysis: 0 new/modified, 0 indirectly invalidated, 0 removed.[info] Compiling main sources...[info] Nothing to compile.[info] Post-analysis: 3 classes.[info] == compile ==[info] [info] == test-compile ==[info] Source analysis: 0 new/modified, 0 indirectly invalidated, 0 removed.[info] Compiling test sources...[info] Nothing to compile.[info] Post-analysis: 10 classes.[info] == test-compile ==[info] [info] == copy-test-resources ==[info] == copy-test-resources ==[info] [info] == copy-resources ==[info] == copy-resources ==[info] [info] == test-start ==[info] == test-start ==[info] [info] == com.twitter.sample.SimpleParserSpec ==[info] SimpleParserSpec[info] SimpleParser should[info] + work with basic tweet[info] == com.twitter.sample.SimpleParserSpec ==[info] [info] == test-complete ==[info] == test-complete ==[info] [info] == test-finish ==[info] Passed: : Total 1, Failed 0, Errors 0, Passed 1, Skipped 0[info] [info] All tests PASSED.[info] == test-finish ==[info] [info] == test-cleanup ==[info] == test-cleanup ==[info] [info] == test ==[info] == test ==[success] Successful.[info] [info] Total time: 0 s, completed Nov 24, 2010 8:54:45 AM> 我们的测试通过了!现在,我们可以增加更多。运行触发动作是 SBT 提供的优秀特性之一。在动作开始添加一个波浪线会启动一个循环,在源文件发生变化时重新运行动作。让我们运行 ~test 并看看会发生什么吧。[info] == test ==[success] Successful.[info] [info] Total time: 0 s, completed Nov 24, 2010 8:55:50 AM1. Waiting for source changes... (press enter to interrupt)现在,让我们添加下面的测试案例 "reject a non-JSON tweet" in { val tweet = """"id":1,"text":"foo"""" parser.parse(tweet) match { case Some(parsed) => fail("didn't reject a non-JSON tweet") case e => e must be_==(None) } } "ignore nested content" in { val tweet = """{"id":1,"text":"foo","nested":{"id":2}}""" parser.parse(tweet) match { case Some(parsed) => { parsed.text must be_==("foo") parsed.id must be_==(1) } case _ => fail("didn't parse tweet") } } "fail on partial content" in { val tweet = """{"id":1}""" parser.parse(tweet) match { case Some(parsed) => fail("didn't reject a partial tweet") case e => e must be_==(None) } }在我们保存文件后,SBT 会检测到变化,运行测试,并通知我们的解析器有问题[info] == com.twitter.sample.SimpleParserSpec ==[info] SimpleParserSpec[info] SimpleParser should[info] + work with basic tweet[info] x reject a non-JSON tweet[info] didn't reject a non-JSON tweet (Specification.scala:43)[info] x ignore nested content[info] 'foo","nested":{"id' is not equal to 'foo' (SimpleParserSpec.scala:31)[info] + fail on partial content因此,让我们返工实现真正的 JSON 解析器package com.twitter.sampleimport org.codehaus.jackson._import org.codehaus.jackson.JsonToken._case class SimpleParsed(id: Long, text: String)class SimpleParser { val parserFactory = new JsonFactory() def parse(str: String) = { val parser = parserFactory.createJsonParser(str) if (parser.nextToken() == START_OBJECT) { var token = parser.nextToken()

上一页  [1] [2] [3] [4]  下一页


简单构建工具