Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala.sys.process:==dons';I don’我没有按预期工作_Scala_Unit Testing_Process - Fatal编程技术网

scala.sys.process:==dons';I don’我没有按预期工作

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

我最近发现了scala.sys.process并开始使用它

我正在尝试为bash文件编写解析器,在编写单元测试时发现==方法有一种奇怪的行为。 (我知道我可以直接运行bash文件,但这只是一个练习)

下面是我的单元测试:

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] )