Groovy断言包含:
assert testList.contains(4)
| |
| false
[1, 2, 6, 3, 4]
我疯了吗?
这是测试代码:
List testList = tester.getFactors(12)
assert testList.size() == 5
assert testList.contains(1)
assert testList.contains(2)
assert testList.contains(3)
assert testList.contains(4)
assert testList.contains(6)
如果我删除除contains(4)和contains(6)之外的所有内容,则它们中的任何一个或两个都会失败。
这是getFactors方法:
List getFactors(int number)
{
def retList = new ArrayList();
(1..Math.sqrt(number)).each() { i ->
if(number % i == 0)
{
//add both the number and the division result
retList.add(i)
if(i>1)
retList.add(number / i)
}
}
retList;
}
任何想法都非常感激。
答案 0 :(得分:6)
如果你这样做:
println getFactors( 12 )*.class.name
你可以看到:
[java.lang.Integer, java.lang.Integer, java.math.BigDecimal, java.lang.Integer, java.math.BigDecimal]
所以6
和4
是BigDecimal
个实例,而不是Integer
个实例
所以contains
失败了(因为您正在寻找Integer(6)
而不是BigDecimal(6)
如果你改变:
retList.add(number / i)
为:
retList.add(number.intdiv( i ) )
然后你的结果将保持为整数,你的断言应该起作用: - )
顺便说一下,只是为了好玩,你的功能可以改写为:List getFactors( int number ) {
(1..Math.sqrt(number)).findAll { i -> number % i == 0 }
.collectMany { i ->
if( i > 1 ) {
[ i, number.intdiv( i ) ]
}
else {
[ i ]
}
}
}