12.1 使用JUnit
用JUnit运行Scala编写的测试相当简单。Scala会编译成Java字节码,用Scala写好测试后,再用scalac
编译成字节码,然后运行测试,就像运行通常的JUnit测试用例一样。记得把Scala库放到classpath
里。下面看一个用Scala编写JUnit测试的例子:
UnitTestingWithScala/SampleTest.scala
import java.util.ArrayList
import org.junit.Test
import org.junit.Assert._
class SampleTest {
@Test def listAdd() {
val list = new ArrayList[String]
list.add("Milk")
list add "Sugar"
assertEquals(2, list.size())
}
}
上面的代码先后导入了java.util.ArrayList
和org.junit.Test
。还有org.junit.Assert
的所有方法,这跟Java 5普及开来的静态导入(static
import)是一样的。SampleTest
这个测试类有一个方法listAdd()
,以JUnit 4.0的Test
注解修饰。测试方法里创建了一个ArrayList
实例,然后在其中添加“milk”这个string
——除了没有分号,这纯粹就是Java语法。接下来添加“Sugar”也展示了Scala的一些语法糖——去掉.和括号。用Scala编写单元测试,可以尽享这些轻量级语法。最后,断言ArrayList
实例里有两个元素。
这段代码可以用scalac
编译,执行方式跟JUnit测试是一样的。下面是用到的命令:
scalac -classpath $JUNITJAR:. SampleTest.scala
java -classpath $SCALALIBRARY:$JUNITJAR:. org.junit.runner.JUnitCore
SampleTest
我已经配置了$JUNITJAR
和$SCALALIBRARY
的环境变量,分别指向JUnit JAR包和Scala库的JAR包所在的位置。下面是测试执行的结果:
JUnit version 4.5
.
Time: 0.02
OK (1 test)
看到用Scala写JUnit测试多简单了吗?利用自己熟悉的Scala习惯用法,你还可以让代码更加清晰。不管是Java代码、Scala代码,还是任何为Java平台编写的代码,都可以很直截了当地通过JUnit或TestNG用Scala来测试。接下来,我们将会看到与JUnit相比,ScalaTest提供了哪些优势。