我正在尝试创建更像'Scala'然后'Java'的FlatSpec测试。通常,我感兴趣的是如何断言类File的实例。
这就是我所拥有的:
File.scala
package org.demo.entries
class File(
val parentPath: String,
val name: String,
val contents: String)
AssertEntries.scala
package org.demo.entries
import org.scalatest.{FlatSpec, Matchers}
object AssertEntries extends FlatSpec with Matchers{
def assertFileEntry(expectedParentPath: String,
expectedName: String,
expectedContent: String,
actual: File) = {
actual should have (
'name (expectedName),
'parentPath (expectedParentPath),
'contents (expectedContent)
)
}
}
FileTest.scala
package org.demo.entries
import org.scalatest.{FlatSpec, Matchers}
import org.demo.entries.AssertEntries._
class FileTest extends FlatSpec with Matchers {
val PATH1: String = "unrelated"
val NAME1: String = "somename"
val CONTENT1: String = "somecontent"
"A file" should "be created" in {
val actual : File = new File(PATH1, NAME1, CONTENT1)
assertFileEntry(PATH1, NAME1, CONTENT1, actual) // Is there some better approach?
}
}
如您所见,我使用自己的assertFileEntry方法来断言文件的实例。一般来说,这种方法更像是Java,但考虑到Scala有不同的语法,我想知道,是否有一种看起来更像Scala的不同方法?
每次我想检查一个File实例时复制assertFileEntry的内容,似乎不太方便。
更新后台 为清楚起见,我省略了其余的代码。通常,File类正在扩展DirEntry类,它有两个子类型:File和Directory。目录具有包含DirEntries的附加列表。 我想通过迭代父Directory列表并调用assertFileEntry(或assertDirectoryEntry)并使用期望值断言每个条目来测试给定Directory是否包含已创建的文件(和嵌套目录)。 这就是为什么我创建assertFileEntry方法,为那里的给定File实例做所有断言的原因,但是,至少在我看来,我的解决方案似乎更像是Java然后Scala解决方案
答案 0 :(得分:1)
如果有效,你的方法似乎还不错。我个人会在FileTest中创建assertFileEntry作为私有方法,如果它没有在其他地方使用,并构建这样的测试:
management:
endpoints:
web:
exposure:
include: '*'
base-path: /actuator
有很多方法可以在Scala中做你想做的事情,所以选择一个适合你的方法。如果您的测试比这更复杂,那么在单独的测试中断言个别事情可能会更好,因此更容易找到代码的哪个部分失败。
此外,在Scala中,将package org.demo.entries
import org.scalatest.{FlatSpec, Matchers}
class FileSpec extends FlatSpec with Matchers {
val PATH1: String = "unrelated"
val NAME1: String = "somename"
val CONTENT1: String = "somecontent"
private def assertFileEntry(expectedParentPath: String,
expectedName: String,
expectedContent: String,
actual: File) = {
actual.name shouldBe expectedName
actual.contents shouldBe expectedContent
actual.parentPath shouldBe expectedParentPath
}
"A file" should "be created" in {
val actual: File = new File(PATH1, NAME1, CONTENT1)
assertFileEntry(PATH1, NAME1, CONTENT1, actual)
}
}
而不是{class name}Spec
等测试文件命名为更常规,例如{class name}Test
或FileSpec
超过{{1} }或ControllerSpec
。