Как я могу сравнить Long и Int с assertEquals.Джунит Котлин - PullRequest
0 голосов
/ 17 декабря 2018

Как я могу сравнить Long и Int с assertEquals с Kotlin и Junit

например

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>

1 Ответ

0 голосов
/ 17 декабря 2018

Я думаю, вам придется конвертировать оба числа в один и тот же тип, например:

assertEquals(size.toLong(), totalElements)

Это преобразует size в Long;и totalElements уже является Long, поэтому компилятор может вывести тип Long для assertEquals().Это немного неловко, но компилируется и делает то, что вы хотите.

(Конечно, вы могли бы вместо этого конвертировать в Int s (или другой числовой тип), но это не так хорошо, потому что это может дать ложные срабатывания, еслиtotalElements находится вне диапазона Int.)

Это немного более неловко, чем Java, потому что Kotlin более осторожен в преобразованиях чисел, которые он делает;как и в случае с улучшенной проверкой нуля, это может привести к потенциальным ошибкам, которых не будет в Java.

Как ни странно, когда я попробовал ваш код, он даже не скомпилировался: произошел сбой с ошибкой «Ошибка вывода типа»,(Я использую kotlinc-jvm 1.3.11.) Еще раз, Kotlin обнаруживает проблемы во время компиляции!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...