我正在尝试解决 KotlinKoans 页面 here 中的“运行”问题
这是我的实现
package runs
fun runs(a: IntArray): Int {
var numberOfRuns = 1;
for (index in 0..a.size-2) {
if (a[index+1] != a[index]) numberOfRuns++
}
return numberOfRuns
}
这是针对实现运行的测试套件
class Tests {
@Test fun testRuns1() {
test(0)
}
@Test fun testRuns2() {
test(1, 1)
}
@Test fun testRuns3() {
test(3, 1, 2, 3)
}
@Test fun testRuns4() {
test(3, 1, 2, 2, 3)
}
@Test fun testRuns5() {
test(3, 1, 1, 2, 3)
}
@Test fun testRuns6() {
test(1, 1, 1, 1, 1)
}
@Test fun testRuns7() {
test(3, 1, 1, 1, 0, 1, 1)
}
@Test fun testRuns8() {
test(3, 1, 1, 1, 0, 1)
}
@Test fun testRuns9() {
test(5, 1, 0, 1, 0, 1)
}
}
fun test(expected: Int, vararg data: Int) {
assertEquals(expected, runs(data), "\ndata = ${Arrays.toString(data)}")
}
除了 testRuns1() 之外的所有测试都通过,我不明白 test(0) 的作用,因为 test() 函数接受两个参数作为输入:预期值和实际值。我错过了什么?
最佳答案
test 的第二个参数是一个 vararg,这意味着它可以接受 0 到多个整数。因此,对 test(0) 的调用预期 = 0 并且 data = 一个空的可变参数列表。
对 running(data) 的调用仅返回 1,因为列表为空并且 for 循环没有任何内容可循环。
编辑:虽然现在我想起来了。这意味着这个测试将会失败,因为它断言预期的运行次数应该为 0,但据我所知,它会返回 1。
关于unit-testing - kotlinlang.org 的这段代码片段中的 test(0) 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45631733/