我该如何比较Long和Int与使用Kotlin和Junit的assertEquals
例如
var size: Int = 20
var totalElements: Long = 20
assertEquals(size, totalElements)
java.lang.AssertionError: expected: java.lang.Integer<20> but was: java.lang.Long<20>
Expected :java.lang.Integer<20>
Actual :java.lang.Long<20>
答案 0 :(得分:2)
我认为您必须将两个数字都转换为相同的类型,例如:
import {combineReducers} from 'redux'
import user from './user/Reducer'
import marketPlace from './money/Reducer'
const rootReducer = combineReducers({
user,
marketPlace
})
export default rootReducer
这会将assertEquals(size.toLong(), totalElements)
转换为Long;并且size
已经是totalElements
,因此编译器可以为Long
推断出Long
类型。有点尴尬,但是可以编译并执行您想要的操作。
(当然,您可以将其转换为assertEquals()
(或其他数字类型),但是那样不好,因为如果Int
超出Int的范围,则可能会产生误报。 )
这比Java有点尴尬,因为Kotlin在执行数字转换时更加谨慎。与改进的null检查一样,它可以暴露Java不会发现的潜在错误。
奇怪的是,当我尝试使用您的代码时,它甚至无法编译:它因“类型推断失败”错误而失败。 (我正在使用kotlinc-jvm 1.3.11。)再次,Kotlin在编译时发现了问题!