为什么我的Scala类对其匹配的测试类不可见?

时间:2015-05-23 01:03:54

标签: scala intellij-idea sbt

我开始在Scala与SBT一起制作一个Hello World计划。

这是我的项目布局:

enter image description here

我确保下载最新的JDK和Scala,并配置我的项目设置。这是我的build.sbt

name := "Coursera_Scala"

version := "1.0"

scalaVersion := "2.11.6"

libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test"

Hello.scala本身编译好了:

package demo

class Hello {
  def sayHelloTo(name: String) = "Hello, $name!"
}

但是,我的陪同HelloTest.scala没有。这是测试:

package demo

import org.scalatest.FunSuite

class HelloTest extends FunSuite {

  test("testSayHello") {
    val result = new Hello.sayHelloTo("Scala")
    assert(result == "Hello, Scala!")
  }

}

这是错误:

Error:(8, 22) not found: value Hello
    val result = new Hello.sayHello("Scala")
                 ^

除编译错误外,Intellij还为符号Helloassert==显示错误“无法解析符号”。这让我相信构建设置不正确,但导入时不会出错吗?

2 个答案:

答案 0 :(得分:2)

问题在于这个表达式:

new Hello.sayHelloTo("Scala")

这将创建在值sayHelloTo上定义的类Hello的新实例。但是,没有值Hello,只有班级Hello

你想写这个:

(new Hello).sayHelloTo("Scala")

这将创建类Hello的新实例,并在实例上调用sayHelloTo

答案 1 :(得分:1)

或者您可以使用DataSource jBossDataSource = null; try { Properties props = new Properties(); props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); props.put(Context.PROVIDER_URL, "remote://localhost:4447"); props.put(Context.SECURITY_PRINCIPAL, "admin"); props.put(Context.SECURITY_CREDENTIALS, "password"); Context ctxt = new javax.naming.InitialContext(props); log.debug("Context Initialized"); Object lookup = ctxt.lookup("java:/SpecOpsDB"); jBossDataSource = (javax.sql.DataSource) lookup; log.info("Got JBoss DataSource"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } 。 Writing()应创建一个新实例,然后调用该方法。