scala.sys.process:==dons';I don’我没有按预期工作
我最近发现了scala.sys.process并开始使用它 我正在尝试为bash文件编写解析器,在编写单元测试时发现==方法有一种奇怪的行为。 (我知道我可以直接运行bash文件,但这只是一个练习) 下面是我的单元测试:scala.sys.process:==dons';I don’我没有按预期工作,scala,unit-testing,process,Scala,Unit Testing,Process,我最近发现了scala.sys.process并开始使用它 我正在尝试为bash文件编写解析器,在编写单元测试时发现==方法有一种奇怪的行为。 (我知道我可以直接运行bash文件,但这只是一个练习) 下面是我的单元测试: test("the process parser works correctly") { val process = "ls" ### "git log" val processLoaded = Experiment.processFromFile("exper
test("the process parser works correctly") {
val process = "ls" ### "git log"
val processLoaded = Experiment.processFromFile("experiments/test.sh")
assert(process == processLoaded)
}
“test.sh”文件仅包含:
#test
ls
git log
但单元测试失败,代码如下:
[info] - the process parser works correctly *** FAILED ***
[info] ( [ls] ### [git, log] ) did not equal ( [ls] ### [git, log] )
对我来说,似乎process和processLoaded是相等的,如果我比较两者的u.toString,测试就被接受了
那么这里发生的事情,为什么scala不能正确地比较这两个对象呢?对于一个
ProcessBuilder
(顺便说一句,它不是一个具体的类,而是一个接口)来说,相等意味着什么可能不是那么直接的,即使在您的情况下,它看起来应该是具有相同操作的同一个命令
返回的实现没有自定义equals/hashcode,因此将继承基于对象标识进行比较的默认对象equals。这意味着只有同一个实例与自身相等
我将为测试框架创建一个特殊的比较器/匹配器,该比较器/匹配器与ProcessBuilder中的命令列表相匹配(例如,如您所说的toString
:ing it)
[info] - the process parser works correctly *** FAILED ***
[info] ( [ls] ### [git, log] ) did not equal ( [ls] ### [git, log] )