微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Groovy断言包含失败,即使我可以看到列表中的项目

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;
}

任何想法都非常感激.

解决方法

如果你这样做:

println getFactors( 12 )*.class.name

你可以看到:

[java.lang.Integer,java.lang.Integer,java.math.BigDecimal,java.math.BigDecimal]

所以6和4是BigDecimal实例,而不是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 ]
                              }
                          }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐