{"id":306668,"date":"2020-07-09T09:00:31","date_gmt":"2020-07-09T09:00:31","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=306668"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=306668","title":{"rendered":"\u0412\u044b\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 Kotlin"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/510206\/\">\n<p>\u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u0442\u0430\u0440\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 \u043a\u0443\u0447\u0443 \u0431\u044b\u043b\u0438 \u043d\u0430\u0432\u0430\u043b\u0435\u043d\u044b \u0430\u0441\u0441\u0435\u0440\u0442\u044b \u0438\u0437 JUnit, kotlin.test \u0438 AssertJ. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0435\u0433\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439: \u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u043a\u0430\u043a \u043f\u0438\u0441\u044c\u043c\u043e \u0414\u044f\u0434\u0438 \u0424\u0435\u0434\u043e\u0440\u0430, \u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0435\u0434\u0438\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0418 \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0448\u043b\u043e.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u0438\u043d\u0438-\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e \u0442\u043e, \u043a\u0430\u043a\u0438\u0435 \u0430\u0441\u0441\u0435\u0440\u0442\u044b \u043b\u0443\u0447\u0448\u0435 \u043f\u043e \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c. \u0425\u043e\u0442\u0435\u043b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435: \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u0441\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u043e\u043c \u043a\u043b\u0435\u043f\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b. \u041f\u043e\u0442\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u0438\u043b \u043e\u0431\u0449\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b, \u0438 \u043a\u0430\u043a \u043f\u043e\u0435\u0445\u0430\u043b\u043e \u0432\u0441\u0435\u2026 \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u043e\u0437\u0435\u0442\u0442\u0441\u043a\u0438\u0439 \u043a\u0430\u043c\u0435\u043d\u044c \u0438 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u043c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043f\u043e\u0434 \u0432\u0430\u0448\u0438 \u0440\u0435\u0430\u043b\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0445\u0438\u0442\u0440\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0420\u0435\u0447\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u043f\u0440\u043e \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0430\u0441\u0441\u0435\u0440\u0442\u044b.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ua\/jc\/ys\/uajcysf7vtxhrmdi0de8gk8vqbi.png\"><\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043b\u0435\u043d\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430\u043d\u0443\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f, \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043c\u043e\u0438\u0445 \u043c\u044b\u0442\u0430\u0440\u0441\u0442\u0432 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0441\u0440\u0430\u0437\u0443 \u043a <a href=\"#rezultaty\">\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f<\/a>.<\/p>\n<p>  <\/p>\n<h2 id=\"nemnogo-bekgraunda\">\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044d\u043a\u0433\u0440\u0430\u0443\u043d\u0434\u0430<\/h2>\n<p>  <\/p>\n<p>\u0414\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043c\u043e\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u042f\u041f \u0431\u044b\u043b\u0430 Scala, \u0430 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u2014 ScalaTest. \u041d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0431\u044b\u043b \u043b\u0443\u0447\u0448\u0438\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043d\u043e \u044f \u043a\u0430\u043a-\u0442\u043e \u043a \u043d\u0435\u043c\u0443 \u043f\u0440\u0438\u0432\u044b\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u043e \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 <a href=\"https:\/\/habr.com\/ru\/company\/inforion\/blog\/278169\/\">\u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 Kotlin<\/a>, \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u0430\u0436\u0435 \u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u0432\u043e\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043a\u0443, \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u043a\u0430\u043b\u043e\u0432\u0441\u043a\u0438\u0445 \u043c\u0430\u0442\u0447\u0435\u0440\u043e\u0432, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u043c\u0430\u043b\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f Kotest (\u0445\u043e\u0442\u044f \u0432 \u043d\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u0441 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f).<\/p>\n<p>  <\/p>\n<h2 id=\"trebovaniya\">\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b \u0438 \u043f\u0440\u0435\u0434\u0432\u0437\u044f\u0442\u044b, \u0430 \u0447\u0430\u0441\u0442\u044c \u2014 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u043a\u0443\u0441\u043e\u0432\u0449\u0438\u043d\u0430. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0442\u0430\u043a\u0438\u0435:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0411\u0435\u0441\u0448\u043e\u0432\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 Kotlin \u0438 IntelliJ Idea. Scala-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u043e\u0442\u043f\u0430\u0434\u0430\u044e\u0442 \u2014 \u0438\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0434\u0432\u0443\u0445 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u043e\u0432 \u043d\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u044f. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u044d\u0442\u043e, ScalaTest \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u043a\u0430\u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441 \u043d\u0438\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u041f\u043e\u0434 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0435\u0439 \u0441 IntelliJ \u044f \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043b\u0438\u043a\u0430 \u043d\u0430 <code>&lt;Click to see difference&gt;<\/code>, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e. \u042d\u0442\u0430 \u0444\u0438\u0447\u0430, \u0432\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043a\u0438\u0448\u043a\u0430\u0445 IntelliJ Idea \u2014 \u043d\u043e \u0432\u0435\u0434\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Kotlin-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430\u0432\u0435\u0440\u043d\u043e \u043f\u0440\u043e \u043d\u0435\u0435 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u0438 \u043c\u043e\u0433\u0443\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u0434\u0430?<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/1y\/ts\/sn\/1ytssnq8dy1gyxs7yxbelvtmegg.png\"><\/li>\n<li>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043d\u0435 <code>1 != 2<\/code> \u0438 \u0441\u0442\u0435\u043a\u0442\u0440\u0435\u0439\u0441, \u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 &quot;expected&quot; \u0438 &quot;actual&quot;. \u0427\u0442\u043e\u0431\u044b \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0431\u044b\u043b\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e &quot;\u0434\u0432\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043d\u0430 100 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u0440\u0430\u0432\u043d\u044b, \u0432\u043e\u0442 \u0442\u0435\u0431\u0435 \u043e\u0431\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0438\u0449\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0441\u0430\u043c&quot;, \u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 &quot;\u2026 \u044d\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c, \u0430 \u0438\u0445 \u043d\u0435\u0442, \u0430 \u0432\u043e\u0442 \u044d\u0442\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b, \u043d\u043e \u043e\u043d\u0438 \u0435\u0441\u0442\u044c&quot;. \u041c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432\u0435\u0437\u0434\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u043c\u0443 \u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u043e \u0437\u0430\u0447\u0435\u043c \u0442\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430? \u041a\u0430\u043a \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u2014 \u044d\u0442\u043e \u0431\u044b\u043b\u0430 \u0432\u043b\u0430\u0436\u043d\u0430\u044f \u043c\u0435\u0447\u0442\u0430, \u0438 \u043f\u0440\u0438 \u043d\u0435\u0434\u043e\u043b\u0433\u0438\u0445 \u0440\u0430\u0437\u0434\u0443\u043c\u044c\u044f\u0445 \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/li>\n<li>\u0410\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438. <code>assertEquals(expected, actual)<\/code> \u2014 \u0419\u043e\u0434\u044b \u0441\u0442\u0438\u043b\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u043c\u043d\u0435, \u0432\u043a\u0443\u0441\u043e\u0432\u0449\u0438\u043d\u0430 \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u043d\u0435 \u0445\u043e\u0447\u0443 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e \u0442\u043e\u043d\u043a\u0438\u0445 \u043d\u044e\u0430\u043d\u0441\u0430\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u2014 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432\/\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u0438 \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 \u0441\u0435\u0440\u0438\u0438 &quot;\u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432, \u0430 \u043d\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0443\u0436\u0435\u043d \u043e\u0441\u043e\u0431\u044b\u0439 \u043c\u0435\u0442\u043e\u0434&quot; \u0438\u043b\u0438 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 <code>contains<\/code>, \u0430 <code>includes<\/code>. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438, \u0442\u0430\u043a \u0438 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432.<\/li>\n<li>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438. \u0427\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 <code>assertThat(&quot;Friendship&quot;).contains(&quot;end&quot;)<\/code>.<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043d\u0442\u0440-\u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 JUnit4, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043b\u043e\u0432\u0438\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u0432 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e, \u043b\u0438\u0431\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0438\u043f\u0430 <code>ExpectedException<\/code> \u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439 <code>@Rule<\/code>.<\/li>\n<li>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430(\u043e\u0432) \u0432 \u043d\u0438\u0445. <\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e.<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432. \u0415\u0441\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u2014 \u0442\u043e \u044d\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043a\u0440\u0443\u0447\u0435, \u0447\u0435\u043c \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0442\u0435\u0441\u0442\u0430. \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043c\u0435\u0448\u0430\u0442\u044c: \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0442\u0438\u043f \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u0442\u0438\u043f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043d\u043e\u0433\u043e generic-\u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0432\u0435\u0434\u0435\u043d. \u041a\u043e\u043d\u0442\u0440-\u043f\u0440\u0438\u043c\u0435\u0440: <code>assertThat(generic&lt;Boolean&gt;(input)).isEqualTo(true)<\/code>. <code>&lt;Boolean&gt;<\/code> \u0442\u0443\u0442 \u043b\u0438\u0448\u043d\u0438\u0439. \u0422\u0440\u0435\u0442\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0430\u0441\u0441\u0435\u0440\u0442\u0430.<\/li>\n<li>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u0432\u0443\u0445 \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439 \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438. \u0418 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432 \u043d\u0438\u0445 \u0432\u043b\u043e\u0436\u0435\u043d \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432. \u0412\u0441\u0435 \u0436\u0435 \u0437\u043d\u0430\u044e\u0442 \u043f\u0440\u043e <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2015\/09\/feedback-request-limitations-on-data-classes\/\" rel=\"nofollow\">\u043d\u0435\u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f<\/a>? \u0422\u0430\u043a \u0432\u043e\u0442 \u0430\u0441\u0441\u0435\u0440\u0442\u044b \u2014 \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u044f \u0445\u043e\u0447\u0443 \u043e\u0431 \u044d\u0442\u043e\u043c \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c\u0441\u044f, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435. \u0414\u043b\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u043e\u0431\u0445\u043e\u0434 \u0434\u0435\u0440\u0435\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u0430 \u043d\u0435 \u0442\u0443\u043f\u043e \u0432\u044b\u0437\u043e\u0432 equals. \u041a\u0441\u0442\u0430\u0442\u0438 \u0432 \u0442\u043e\u0439 \u043d\u0435\u0434\u043e-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0442\u0430\u043a \u0438 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0438\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0433\u0434\u0435 \u043d\u0430\u0434\u043e \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>\u0447\u0435\u043b\u043e\u0432\u0435\u043a<\/code> \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0438 \u0448\u0432\u0435\u0446, \u0438 \u0436\u043d\u0435\u0446, \u0438 \u043d\u0430 \u0434\u0443\u0434\u0435 \u0438\u0433\u0440\u0430\u0435\u0442, \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0430\u0440\u0435\u043d\u044c \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0438 \u0432\u0440\u0435\u043c\u044f. \u041f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, \u0447\u0442\u043e \u0446\u0435\u043b\u044c \u2014 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u0440\u0442\u044b, \u0430 \u043d\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432. \u0418 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440 \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0438\u0448\u0435\u0442 \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u044b, \u0430 \u043d\u0435 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e QA-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430.<\/p>\n<p>  <\/p>\n<h2 id=\"konkursanty\">\u041a\u043e\u043d\u043a\u0443\u0440\u0441\u0430\u043d\u0442\u044b<\/h2>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0448\u0442\u0443\u043a 5 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043d\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u2014 \u043f\u0440\u0443\u0434 \u043f\u0440\u0443\u0434\u0438.<\/p>\n<p>  <\/p>\n<p>\u042f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<p>  <\/p>\n<ol>\n<li><a href=\"https:\/\/www.scalatest.org\" rel=\"nofollow\">ScalaTest<\/a> \u2014 \u043a\u0430\u043a \u043e\u043f\u043e\u0440\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f.<\/li>\n<li><a href=\"https:\/\/junit.org\/junit5\/\" rel=\"nofollow\">JUnit 5<\/a> \u2014 \u043a\u0430\u043a \u043e\u043f\u043e\u0440\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0434\u043b\u044f \u0441\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e Java-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.<\/li>\n<li><a href=\"https:\/\/kotlinlang.org\/api\/latest\/kotlin.test\/\" rel=\"nofollow\">kotlin.test<\/a> \u2014 \u0434\u043b\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 multiplatform \u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u2014 \u044d\u0442\u043e \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 JUnit, \u043d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b.<\/li>\n<li><a href=\"https:\/\/assertj.github.io\/doc\/\" rel=\"nofollow\">AssertJ<\/a> \u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441 \u0431\u043e\u0433\u0430\u0442\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432. \u041e\u0442\u043f\u043e\u0447\u043a\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043e\u0442 FestAssert, <a href=\"http:\/\/fest.easytesting.org\/\" rel=\"nofollow\">\u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e<\/a> \u043f\u043e-\u044f\u043f\u043e\u043d\u0441\u043a\u0438 \u0442\u043e\u0440\u0433\u0443\u044e\u0442 \u0441\u0435\u0437\u0430\u043c\u0438\u043d\u043e\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u0441\u0442\u0430\u0440\u044b\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e.<\/li>\n<li><a href=\"https:\/\/github.com\/kotest\/kotest\" rel=\"nofollow\">Kotest<\/a> \u2014 \u043e\u043d \u0436\u0435 KotlinTest, \u043d\u0435 \u043f\u0443\u0442\u0430\u0442\u044c \u0441 kotlin.test. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0438\u0448\u0443\u0442, \u0447\u0442\u043e \u0438\u0445 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u044f\u043b ScalaTest. \u0412 \u043a\u0438\u0448\u043a\u0430\u0445 \u0435\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f <a href=\"https:\/\/github.com\/kotest\/kotest\/blob\/624a36a1936e370ae720cca2a7878af47f27604b\/kotest-assertions\/kotest-assertions-shared\/src\/commonMain\/kotlin\/io\/kotest\/data\/tables.kt\" rel=\"nofollow\">1-22 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/a> \u2014 \u0432 \u043b\u0443\u0447\u0448\u0438\u0445 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u044f\u0445 scala.<\/li>\n<li><a href=\"https:\/\/truth.dev\/\" rel=\"nofollow\">Truth<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0442 \u0413\u0443\u0433\u043b\u0430. \u041f\u043e \u0441\u043b\u043e\u0432\u0430\u043c \u0441\u0430\u043c\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439, \u043e\u0447\u0435\u043d\u044c \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 AssertJ.<\/li>\n<li><a href=\"http:\/\/hamcrest.org\/JavaHamcrest\/\" rel=\"nofollow\">Ham\u0441rest<\/a> \u00ad\u2014 \u0444\u0430\u0432\u043e\u0440\u0438\u0442 \u043c\u043d\u043e\u0433\u0438\u0445 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432 \u043f\u043e \u043c\u043d\u0435\u043d\u0438\u044e <a href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/346186\/\">\u042f\u043d\u0434\u0435\u043a\u0441\u0430<\/a>. \u041f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0435 \u0435\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <a href=\"http:\/\/www.valid4j.org\/\" rel=\"nofollow\">valid4j<\/a>.<\/li>\n<li><a href=\"https:\/\/strikt.io\/\" rel=\"nofollow\">Strikt<\/a> \u2014 \u043c\u043d\u043e\u0433\u0438\u043c \u043e\u0431\u044f\u0437\u0430\u043d AssertJ \u0438 \u043f\u043e \u0441\u0442\u0438\u043b\u044e \u0442\u043e\u0436\u0435 \u0435\u0433\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442.<\/li>\n<li><a href=\"https:\/\/markusamshove.github.io\/Kluent\/\" rel=\"nofollow\">Kluent<\/a> \u2014 \u0430\u0432\u0442\u043e\u0440 \u043f\u0438\u0448\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 JUnit (\u0445\u043e\u0442\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u2014 \u043d\u0430\u0434 kotlin.test), \u043f\u043e \u0441\u0442\u0438\u043b\u044e \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 Kotest. \u041c\u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u2014 \u043a\u0443\u0447\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0442\u0435\u043d \u0442\u0435\u043a\u0441\u0442\u0430.<\/li>\n<li><a href=\"https:\/\/github.com\/robstoll\/atrium\" rel=\"nofollow\">Atrium<\/a> \u2014 \u043f\u043e \u0441\u043b\u043e\u0432\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439, \u0447\u0435\u0440\u043f\u0430\u043b\u0438 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0438\u0437 AssertJ, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0432\u0441\u0442\u0430\u043b\u0438 \u043d\u0430 \u0441\u0432\u043e\u0439 \u043f\u0443\u0442\u044c. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u2014 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432 (\u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 maven\/gradle).<\/li>\n<li><a href=\"https:\/\/github.com\/winterbe\/expekt\" rel=\"nofollow\">Expekt<\/a> \u2014 \u0447\u0435\u0440\u043f\u0430\u043b\u0438 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0438\u0437 Chai.js. \u041f\u0440\u043e\u0435\u043a\u0442 \u0437\u0430\u0431\u0440\u043e\u0448\u0435\u043d: \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u2014 4 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434.<\/li>\n<li><a href=\"https:\/\/github.com\/willowtreeapps\/assertk\" rel=\"nofollow\">AssertK<\/a> \u2014 \u043a\u0430\u043a AssertJ, \u0442\u043e\u043b\u044c\u043a\u043e AssertK (\u043d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b).<\/li>\n<li><a href=\"https:\/\/github.com\/npryce\/hamkrest\" rel=\"nofollow\">HamKrest<\/a> \u2014 \u043a\u0430\u043a Ham\u0441rest, \u0442\u043e\u043b\u044c\u043a\u043e HamKrest (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0442 Hamcrest \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0442\u0438\u043b\u044c).<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0430\u043d\u0442\u043e\u0432 \u2014 \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0445, \u043a\u0430\u043a\u0443\u044e \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u0443\u044e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u044f \u0443\u043f\u0443\u0441\u0442\u0438\u043b \u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 <a href=\"https:\/\/github.com\/ov7a\/kotlin-asserts-comparison\" rel=\"nofollow\">\u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442<\/a>.<\/p>\n<p>  <\/p>\n<h2 id=\"evolyuciya-metodiki-ocenki\">\u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0438 \u043e\u0446\u0435\u043d\u043a\u0438<\/h2>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 80 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b \u0432\u0441\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 <a href=\"https:\/\/github.com\/code-schreiber\/AssertLibsCompare\" rel=\"nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a>, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u0447\u0442\u043e \u043c\u043d\u0435 \u0434\u0443\u043c\u0430\u043b\u043e\u0441\u044c \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0443-\u0442\u043e \u0442\u0430\u043c \u043f\u0440\u043e\u0449\u0435 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c, \u043d\u043e \u0442\u0430\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0430\u043d\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0441\u043e\u0437\u0434\u0430\u043b \u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0430\u043b\u044f\u0442\u0441\u044f, 1 \u0442\u0435\u0441\u0442 \u2014 1 \u0430\u0441\u0441\u0435\u0440\u0442. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u044f \u043b\u044e\u0431\u043b\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/post\/497628\/\">\u0432\u0441\u044f\u043a\u0443\u044e<\/a> <a href=\"https:\/\/habr.com\/ru\/company\/inforion\/blog\/354468\/\">\u0434\u0438\u0447\u044c<\/a>, \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043b\u0430\u0431\u0443\u0434\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u043d\u043e \u043b\u0435\u043d\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0443\u0442\u043a\u0443 &quot;\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043b\u0435\u043f\u0438\u0442\u044c \u043c\u0438\u043d\u0443\u0441 \u0437\u0430 &quot;\u043d\u0438\u0437\u043a\u0438\u0439 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430&quot;&quot;.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0442\u043e\u043c \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043d\u0430\u0434\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 JUnit \u0441\u0434\u0435\u043b\u0430\u043b <a href=\"https:\/\/github.com\/ov7a\/kotlin-asserts-comparison\/blob\/master\/src\/test\/kotlin\/common\/TestReportValidator.kt\" rel=\"nofollow\">\u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0437\u0430\u0432\u0430\u043b\u0438\u0442\u044c\u0441\u044f, \u0437\u0430\u0432\u0430\u043b\u0438\u043b\u0438\u0441\u044c, \u0438 \u0447\u0442\u043e \u043d\u0435\u0442 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432. \u041a\u043e\u0433\u0434\u0430 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 <a href=\"https:\/\/github.com\/scalatest\/scalatest\/issues\/491\" rel=\"nofollow\">\u0431\u0430\u0433 \u0432 ScalaTest<\/a>, \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0432\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438: \u043e\u0434\u043d\u0430, \u0433\u0434\u0435 \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442, \u0432\u0442\u043e\u0440\u0430\u044f \u2014 \u0433\u0434\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u043b \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440. \u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c: \u0430 \u043a\u0442\u043e \u0441\u0442\u0440\u0438\u0436\u0435\u0442 \u0431\u0440\u0430\u0434\u043e\u0431\u0440\u0435\u044f \u0438 \u043a\u0430\u043a\u0438\u0435 \u0430\u0441\u0441\u0435\u0440\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0442\u0430\u043c? \u041e\u0442\u0447\u0430\u0441\u0442\u0438 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u043e\u0442\u0447\u0430\u0441\u0442\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432 \u0442\u0430\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442:). \u0417\u0430\u043e\u0434\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043c\u043e\/\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u0441\u0441\u0435\u0440\u0442\u044b \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u043e\u043e\u0431\u0449\u0435.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0441\u043f\u0443\u0442\u044c\u0435: \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u043b\u0438 \u0438\u043b\u0438 \u043d\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0442\u0438\u043f\u0430 <code>listOf(1,2,3)<\/code>? \u0415\u0441\u043b\u0438 \u0434\u0430 \u2014 \u0442\u043e \u044d\u0442\u043e \u0443\u043f\u043e\u0440\u043e\u0442\u043e\u0441\u0442\u044c \u043a\u0430\u043a\u0430\u044f-\u0442\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u0442\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0430\u0441\u0441\u0435\u0440\u0442\u044b \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0448\u0438\u0431\u0443\u0441\u044c. \u0421\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u0438 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0442\u0443 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u044f \u043f\u043b\u044e\u043d\u0443\u043b \u0438 \u0440\u0435\u0448\u0438\u043b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c: \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043e\u0431\u0449\u0438\u0439 \u0441\u043a\u0435\u043b\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b <a href=\"https:\/\/github.com\/ov7a\/kotlin-asserts-comparison\/blob\/master\/src\/test\/kotlin\/common\/Asserts.kt\" rel=\"nofollow\">\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0432\u0430\u0442\u043e, \u0437\u0430\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0440\u043e\u0437\u0435\u0442\u0442\u0441\u043a\u0438\u0439 \u043a\u0430\u043c\u0435\u043d\u044c.<\/p>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 \u0438 type erasure. Reified \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 inline-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445, \u0430 \u0438\u0445 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u0430\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0442\u0438\u043f\u0430<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">assertThrows&lt;T&gt;{...}<\/code><\/pre>\n<p>  <\/p>\n<p>\u0432 \u043a\u043e\u0434\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0435\u0437 reified \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">assertThrows(expectedClass){...}<\/code><\/pre>\n<p>  <\/p>\n<p>\u042f \u0447\u0435\u0441\u0442\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u043b\u0441\u044f \u0432 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0438 \u0440\u0435\u0448\u0438\u043b \u043d\u0430 \u043d\u0435\u0435 \u0437\u0430\u0431\u0438\u0442\u044c. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u0432 kotlin.test \u0435\u0441\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c <a href=\"https:\/\/kotlinlang.org\/api\/latest\/kotlin.test\/kotlin.test\/-asserter\/\" rel=\"nofollow\">Asserter<\/a>: \u0430\u0441\u0441\u0435\u0440\u0442 \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 \u043d\u0435\u0433\u043e \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d, \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/kotlinlang.org\/api\/latest\/kotlin.test\/kotlin.test\/assert-fails.html\" rel=\"nofollow\">\u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439<\/a>. \u0427\u0435\u0433\u043e \u043c\u043d\u0435 \u0442\u043e\u0433\u0434\u0430 \u0432\u044b\u043f\u0435\u043d\u0434\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u044f\u0437\u044b\u043a\u0430 \u0442\u0430 \u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430?:)<\/p>\n<p>  <\/p>\n<p>\u0412\u0435\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/ov7a\/kotlin-asserts-comparison\" rel=\"nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 GitHub<\/a>. \u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u043a\u0440\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u043e ScalaTest \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c.<\/p>\n<p>  <\/p>\n<h2 id=\"rezultaty\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h2>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0442\u0443\u043f\u043e \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u043c \u0431\u0430\u043b\u043b\u044b \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c: 0 \u2014 \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e, 0.5 \u2014 \u0435\u0441\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e, 1 \u2014 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0432 \u0446\u0435\u043b\u043e\u043c \u043e\u043a. \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u2014 9 \u0431\u0430\u043b\u043b\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443, \u043d\u0430\u0434\u043e \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0444\u0438\u0447\u0438 \u0438\u043c\u0435\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0432\u0435\u0441. \u0410 \u043f\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0443\u043d\u043a\u0442\u0430\u043c \u0442\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u0440\u043e\u0431\u043d\u044b\u0435 \u043e\u0446\u0435\u043d\u043a\u0438 \u0434\u0430\u0432\u0430\u0442\u044c. \u041d\u043e \u044f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u0442\u0438 \u0432\u0435\u0441\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u0432\u043e\u0438. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u0445\u043e\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443 \u043c\u043d\u0435 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b &quot;\u0441\u043a\u043e\u0440\u0435\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0435&quot; \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0431\u044b\u043b\u0438 \u043d\u0430\u0432\u0435\u0440\u0445\u0443, \u0430 &quot;\u0441\u043a\u043e\u0440\u0435\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c&quot; \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0431\u044b\u043b\u0438 \u0432\u043d\u0438\u0437\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0442\u0443\u043f\u0443\u044e \u0441\u0443\u043c\u043c\u0443.<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/th>\n<th>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f<\/th>\n<th>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438<\/th>\n<th>\u0427\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/th>\n<th>\u041f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0430<\/th>\n<th>\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/th>\n<th>\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438<\/th>\n<th>\u041e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f<\/th>\n<th>\u0412\u044b\u0432\u043e\u0434 \u0442\u0438\u043f\u043e\u0432<\/th>\n<th>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b<\/th>\n<th>\u0418\u0442\u043e\u0433\u043e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Kotest<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>\u043d\u0435\u0442<\/td>\n<td>&#8212;<\/td>\n<td>6.0<\/td>\n<\/tr>\n<tr>\n<td>Kluent<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>\u043d\u0435\u0442<\/td>\n<td>&#8212;<\/td>\n<td>6.0<\/td>\n<\/tr>\n<tr>\n<td>AssertJ<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>\u043d\u0435\u0442<\/td>\n<td>\u00b1<\/td>\n<td>6.0<\/td>\n<\/tr>\n<tr>\n<td>Truth<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>&#8212;<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>\u043d\u0435\u0442<\/td>\n<td>&#8212;<\/td>\n<td>5.5<\/td>\n<\/tr>\n<tr>\n<td>Strikt<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>\u043d\u0435\u0442<\/td>\n<td>&#8212;<\/td>\n<td>5.5<\/td>\n<\/tr>\n<tr>\n<td>ScalaTest<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>\u043d\u0435\u0442<\/td>\n<td>&#8212;<\/td>\n<td>5.5<\/td>\n<\/tr>\n<tr>\n<td>HamKrest<\/td>\n<td>\u00b1<\/td>\n<td>&#8212;<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>\u0434\u0430<\/td>\n<td>&#8212;<\/td>\n<td>5.5<\/td>\n<\/tr>\n<tr>\n<td>AssertK<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>\u043d\u0435\u0442<\/td>\n<td>&#8212;<\/td>\n<td>5.0<\/td>\n<\/tr>\n<tr>\n<td>Atrium<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>\u043d\u0435\u0442<\/td>\n<td>&#8212;<\/td>\n<td>5.0<\/td>\n<\/tr>\n<tr>\n<td>Ham\u0441rest<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>&#8212;<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>\u0434\u0430<\/td>\n<td>&#8212;<\/td>\n<td>5.0<\/td>\n<\/tr>\n<tr>\n<td>JUnit<\/td>\n<td>+<\/td>\n<td>+<\/td>\n<td>&#8212;<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>&#8212;<\/td>\n<td>\u00b1<\/td>\n<td>\u0438\u0433\u043d\u043e\u0440<\/td>\n<td>&#8212;<\/td>\n<td>4.5<\/td>\n<\/tr>\n<tr>\n<td>kotlin.test<\/td>\n<td>+<\/td>\n<td>\u00b1<\/td>\n<td>&#8212;<\/td>\n<td>&#8212;<\/td>\n<td>+<\/td>\n<td>&#8212;<\/td>\n<td>&#8212;<\/td>\n<td>\u0434\u0430<\/td>\n<td>&#8212;<\/td>\n<td>3.5<\/td>\n<\/tr>\n<tr>\n<td>Expekt<\/td>\n<td>\u00b1<\/td>\n<td>\u00b1<\/td>\n<td>&#8212;<\/td>\n<td>+<\/td>\n<td>&#8212;<\/td>\n<td>\u00b1<\/td>\n<td>+<\/td>\n<td>\u043d\u0435\u0442<\/td>\n<td>&#8212;<\/td>\n<td>3.5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Kotest<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0441\u0441\u0435\u0440\u0442\u044b, \u043d\u0430\u0434\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0441\u0445\u043e\u0434\u0443 \u044d\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0442\u044f\u0436\u0435\u043b\u043e.<\/li>\n<li>\u041d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043b\u043e\u0432\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u044f\u0432\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c, \u0430 \u043d\u0435 reified, \u043d\u043e \u044d\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0438 \u043d\u0443\u0436\u043d\u043e: \u043c\u0430\u043b\u043e \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u0438 \u0438\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f\u043c\u0438.<\/li>\n<li>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0442\u0435\u0441\u0442 \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b. \u042f \u0437\u0430\u0432\u0435\u043b \u043d\u0430 \u044d\u0442\u043e <a href=\"https:\/\/github.com\/kotest\/kotest\/issues\/1543\" rel=\"nofollow\">\u0442\u0438\u043a\u0435\u0442<\/a>.<\/li>\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: <code>&lt;Click to see difference&gt;<\/code> \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432.<\/li>\n<li>\u0422\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f: \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u043e\u0432 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043c \u044f\u0432\u043d\u044b\u0439 \u0442\u0438\u043f.<\/li>\n<li>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a: \u043f\u043e\u0447\u0442\u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0435, \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0434\u0432\u0443\u0445 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432.<\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Kluent<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\u041c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a <code>&quot;hello&quot;.shouldBeEqualTo(&quot;hello&quot;)<\/code>, \u0442\u0430\u043a \u0438 <code>&quot;hello&quot; `should be equal to` &quot;hello&quot;<\/code>. \u041b\u044e\u0431\u0438\u0442\u0435\u043b\u044f\u043c DSL \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f.<\/li>\n<li>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f \u043b\u043e\u0432\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: <br \/> \n<pre><code class=\"kotlin\">invoking { block() } shouldThrow expectedClass.kotlin withMessage expectedMessage<\/code><\/pre>\n<\/li>\n<li>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0446\u0435\u043b\u043e\u043c \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435, \u043d\u0435 \u043d\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0434\u0432\u0443\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439, \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u0415\u0449\u0435 \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0438\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>Expected Iterable to contain none of &quot;[1, 3]&quot;<\/code> \u2014 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0439 Iterable \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442.<\/li>\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: <code>&lt;Click to see difference&gt;<\/code> \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432.<\/li>\n<li>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0442\u0435\u0441\u0442 \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b.<\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">AssertJ<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\n<p>\u0412\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u2014 \u0435\u0449\u0435 \u0431\u044b \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0438\u0445\u2026 \u041d\u0430\u0434\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043f\u0438\u0441\u043a\u0438 \u043d\u0430\u0434\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>containsExactly<\/code>, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u2014 \u0447\u0435\u0440\u0435\u0437 <code>hasSameElementsAs<\/code>, \u0430 \u0441\u043b\u043e\u0432\u0430\u0440\u0438 \u2014 \u0447\u0435\u0440\u0435\u0437 <code>.usingRecursiveComparison().isEqualTo<\/code>.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: \u043d\u0435\u0442 <code>&lt;Click to see difference&gt;<\/code>.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: \u043b\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0435\u0441\u0442\u044c <code>.usingRecursiveComparison()<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0447\u0442\u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0448\u0438\u0431\u043a\u0443 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: \u0430\u0441\u0441\u0435\u0440\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443 \u043d\u0435 \u0440\u0430\u0432\u043d\u044b, \u043d\u043e \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443. \u0418 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b, \u0447\u0442\u043e \u0434\u0432\u0430 \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u0440\u0430\u0432\u043d\u044b, \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0440\u0442\u0430<\/p>\n<p>  <\/p>\n<pre><code class=\"kotlin\">assertThat(actual)     .usingRecursiveComparison()     .isNotEqualTo(unexpected)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e: \u0434\u043b\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043d\u0435 \u0437\u0430\u0432\u0430\u043b\u0438\u043b\u0441\u044f \u0442\u0435\u0441\u0442 \u043d\u0430 \u0438\u0445 \u043d\u0435\u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0422\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f: \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u043e\u0432 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043c \u044f\u0432\u043d\u044b\u0439 \u0442\u0438\u043f. \u0412\u0438\u0434\u0438\u043c\u043e, \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 DSL.<\/p>\n<p>  <\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Truth<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445, \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u0435.<\/li>\n<li>\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043f\u0438\u0448\u0443\u0442, \u0447\u0442\u043e <a href=\"https:\/\/github.com\/google\/truth\/issues\/219\" rel=\"nofollow\"><code>\u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c assertThrows<\/code><\/a> \u0438\u0437 JUnit5. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0430 \u0435\u0441\u043b\u0438 \u0430\u0441\u0441\u0435\u0440\u0442\u044b \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 JUnit \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442, \u0442\u043e \u0447\u0442\u043e?<\/li>\n<li>\u0427\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c: \u043a\u0440\u043e\u043c\u0435 \u043f\u0440\u0438\u043a\u043e\u043b\u0430 \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c, \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438: <code>containsAtLeastElementsIn<\/code>. \u041d\u043e \u044f \u0434\u0443\u043c\u0430\u044e \u043d\u0430 \u043e\u0431\u0449\u0435\u043c \u0444\u043e\u043d\u0435 \u044d\u0442\u043e \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0431\u043b\u0430\u0433\u043e \u0442\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u044f\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c <code>assertThat(actual).isEqualTo(expected)<\/code>.<\/li>\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: <code>&lt;Click to see difference&gt;<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0440\u0442\u0430.<\/li>\n<li>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0442\u0435\u0441\u0442 \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b.<\/li>\n<li>\u0422\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f: \u0442\u0438\u043f \u043d\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u044f\u0432\u043d\u043e.<\/li>\n<li>\u0412\u0435\u0441\u0435\u043b\u044b\u0439 \u0441\u0442\u0435\u043a\u0442\u0440\u0435\u0439\u0441 \u0441 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u043b\u043a\u0430\u043c\u0438 \u0441\u0441\u044b\u043b\u043e\u043a &quot;\u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438&quot;:<br \/> \n<pre><code class=\"plaintext\">expected: 1 but was : 2 at asserts.truth.TruthAsserts.simpleAssert(TruthAsserts.kt:10) at common.FailedAssertsTestBase.simple assert should have descriptive message(FailedAssertsTestBase.kt:20) at [[Reflective call: 4 frames collapsed (https:\/\/goo.gl\/aH3UyP)]].(:0) at [[Testing framework: 27 frames collapsed (https:\/\/goo.gl\/aH3UyP)]].(:0) at java.base\/java.util.ArrayList.forEach(ArrayList.java:1540) at [[Testing framework: 9 frames collapsed (https:\/\/goo.gl\/aH3UyP)]].(:0) at java.base\/java.util.ArrayList.forEach(ArrayList.java:1540) at [[Testing framework: 9 frames collapsed (https:\/\/goo.gl\/aH3UyP)]].(:0) at java.base\/java.util.ArrayList.forEach(ArrayList.java:1540) at [[Testing framework: 17 frames collapsed (https:\/\/goo.gl\/aH3UyP)]].(:0) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99) ...<\/code><\/pre>\n<\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Strikt<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\n<p>\u041d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043b\u043e\u0432\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u044f\u0432\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c, \u0430 \u043d\u0435 reified, \u043d\u043e \u044d\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0438 \u043d\u0443\u0436\u043d\u043e: \u043c\u0430\u043b\u043e \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u0438 \u0438\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>  <\/li>\n<li>\n<p>\u041e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e: <code>expectThat(haystack).not().contains(needle)<\/code>, \u0445\u043e\u0442\u044f \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0435\u0441\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 <code>expectThat(collection).doesNotContain(items)<\/code>.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0427\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c: \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>contentEquals<\/code>. \u0422\u0430 \u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435\u043c: <code>expectThat(actual).not().contentEquals(unexpected)<\/code>. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u0434\u043e \u0435\u0449\u0435 \u0434\u0443\u043c\u0430\u0442\u044c \u043e \u0442\u0438\u043f\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f <code>Array&lt;T&gt;<\/code> Strikt \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0433 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0430\u0441\u0441\u0435\u0440\u0442 \u0441\u0430\u043c. \u0414\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u2014 <code>containsExactly<\/code>, \u0434\u043b\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u2014 <code>containsExactlyInAnyOrder<\/code>.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0422\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f: \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u043e\u0432 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043c \u044f\u0432\u043d\u044b\u0439 \u0442\u0438\u043f. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0435 \u0441 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0442\u0438\u043f \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"kotlin\">val actual: Array&lt;String&gt; = arrayOf(&quot;1&quot;) val expected: Array&lt;String&gt; = arrayOf(&quot;2&quot;) expectThat(actual).contentEquals(expected)<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u043d \u043d\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u043b\u044f <code>contentEquals<\/code>. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u044b\u0439 <code>contentEquals<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0441 \u043a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"kotlin\">infix fun &lt;T&gt; Assertion.Builder&lt;Array&lt;out T&gt;&gt;.contentEquals(other: Array&lt;out T&gt;)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c<\/p>\n<p>  <\/p>\n<pre><code class=\"kotlin\">val actual: Array&lt;out String&gt; = arrayOf(&quot;1&quot;) val expected: Array&lt;String&gt; = arrayOf(&quot;2&quot;) expectThat(actual).contentEquals(expected)<\/code><\/pre>\n<p>  <\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: \u043d\u0435\u0442 <code>&lt;Click to see difference&gt;<\/code>.<\/p>\n<p>  <\/li>\n<li>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438: \u043d\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, \u0430 \u0446\u0435\u043b\u043e\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0442\u0435\u0441\u0442 \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b.<\/p>\n<p>  <\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">ScalaTest<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435.<\/li>\n<li>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438: \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0440\u0430\u0432\u043d\u044b. \u0414\u043b\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0435\u0442.<\/li>\n<li>\u0427\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c: \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 DSL \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0438 \u0438 <code>contains<\/code>, \u043e\u0442\u043b\u0438\u0447\u0438\u0438 <code>contains<\/code> \u0438 <code>include<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 <code>theSameElementsAs<\/code>.<\/li>\n<li>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0442\u0435\u0441\u0442 \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b, \u043d\u0430 \u044d\u0442\u043e <a href=\"https:\/\/github.com\/scalatest\/scalatest\/issues\/491\" rel=\"nofollow\">\u0435\u0441\u0442\u044c \u0442\u0438\u043a\u0435\u0442<\/a>.<\/li>\n<li>\u0422\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f: \u0442\u0438\u043f \u043d\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u044f\u0432\u043d\u043e.<\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">HamKrest<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\u041f\u0440\u043e\u0435\u043a\u0442, \u0441\u0443\u0434\u044f \u043f\u043e \u0442\u0438\u043a\u0435\u0442\u0430\u043c, \u0432 \u043f\u043e\u043b\u0443\u0437\u0430\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u0436\u0438\u0434\u0435\u043d\u044c\u043a\u0430\u044f \u2014 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0443\u0433\u0430\u0434\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0447\u0435\u0440\u0430.<\/li>\n<li>\u041e\u0436\u0438\u0434\u0430\u043b, \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u044b Hamcrest, \u043d\u043e \u043d\u0435 \u0442\u0443\u0442-\u0442\u043e \u0431\u044b\u043b\u043e: \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e\u0435 \u0442\u0443\u0442 \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443.<\/li>\n<li>\u0417\u0430\u043f\u0438\u0441\u044c \u043b\u043e\u0432\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u2014 \u0437\u0443\u0431\u043e\u0434\u0440\u043e\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f:<br \/> \n<pre><code class=\"kotlin\">assertThat( {     block() }, throws(has(RuntimeException::message, equalTo(expectedMessage))))<\/code><\/pre>\n<\/li>\n<li>\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438: \u043d\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. <a href=\"https:\/\/github.com\/npryce\/hamkrest\/pull\/15\" rel=\"nofollow\">\u041f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442<\/a> \u0432\u0438\u0441\u0438\u0442 3,5 \u0433\u043e\u0434\u0430. \u041d\u0430\u043f\u0438\u0441\u0430\u043b \u0442\u0430\u043a: <code>assertThat(collection, allOf(items.map { hasElement(it) }))<\/code>.<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043d\u0435\u0442.<\/li>\n<li>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0442\u0435\u0441\u0442 \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b.<\/li>\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: \u043d\u0435\u0442 <code>&lt;Click to see difference&gt;<\/code>.<\/li>\n<li>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u2014 \u043a\u0430\u043a-\u0442\u043e \u043d\u0438 \u043e \u0447\u0435\u043c:<br \/> \n<pre><code class=\"plaintext\">expected: a value that not contains 1 or contains 3 but contains 1 or contains 3<\/code><\/pre>\n<\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">AssertK<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u2014 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 AssertJ. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f (\u043d\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443).<\/p>\n<p>  <\/li>\n<li>\n<p>\u0427\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c: \u0415\u0441\u043b\u0438 \u0432 AssertJ \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e <code>assertThat(collection).containsAll(items)<\/code>, \u0442\u043e \u0432 AssertK \u0442\u0430 \u0436\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043d\u0435\u043c <code>containsAll<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>vararg<\/code>. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0446\u0435\u043b\u044c \u043d\u0430 <code>containsAll(1,2,3)<\/code>, \u043d\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0435\u0441\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043d\u043e \u0432 \u043d\u0438\u0445 \u043e\u043d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0430 \u0442\u0443\u0442 \u2014 \u043d\u0435\u0442. \u041f\u0440\u0438\u0447\u0435\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u2014 \u044d\u0442\u043e <a href=\"https:\/\/github.com\/willowtreeapps\/assertk\/issues\/2\" rel=\"nofollow\">\u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u0438\u043a\u0435\u0442\u043e\u0432<\/a>. \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a, \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c <code>containsOnly<\/code> \u0438 <code>containsExactly<\/code>.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: \u043d\u0435\u0442 <code>&lt;Click to see difference&gt;<\/code>.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: \u043b\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435, \u043f\u043e\u0442\u043e\u043c \u0435\u0433\u043e \u0442\u0438\u043f \u043d\u0430\u0434\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0430\u043d\u0430\u043b\u043e\u0433\u0430 <code>.usingRecursiveComparison()<\/code> \u043d\u0435\u0442.<\/p>\n<p>  <\/li>\n<li>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u2014 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0435\u0441\u0442\u044c (\u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0432\u0435\u0437\u0434\u0435), \u043d\u043e \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">expected to contain exactly:&lt;[3, 4, 5]&gt; but was:&lt;[1, 2, 3]&gt; at index:0 unexpected:&lt;1&gt; at index:1 unexpected:&lt;2&gt; at index:1 expected:&lt;4&gt; at index:2 expected:&lt;5&gt;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0443\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u0432\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f?<\/p>\n<p>  <\/li>\n<li>\n<p>\u0422\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f: \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u043e\u0432 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043c \u044f\u0432\u043d\u044b\u0439 \u0442\u0438\u043f.<\/p>\n<p>  <\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Atrium<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\u041f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0443\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u0441\u0442\u0438\u043b\u044f: fluent \u0438 infix. \u042f \u043e\u0436\u0438\u0434\u0430\u043b \u043e\u0442\u043b\u0438\u0447\u0438\u0439 \u0432\u0438\u0434\u0430 <code>assertThat(x).isEqualTo(y)<\/code> \u043f\u0440\u043e\u0442\u0438\u0432 <code>x shouldBe y<\/code>, \u043d\u043e \u043d\u0435\u0442, \u044d\u0442\u043e <code>expect(x).toBe(y)<\/code> \u043f\u0440\u043e\u0442\u0438\u0432 <code>expect(x) toBe y<\/code>. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430, \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0431\u0435\u0437 &quot;\u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0441\u0442\u0438&quot;. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442-\u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c <code>o<\/code>: <code>expect(x) contains o atLeast 1 butAtMost 2 value &quot;hello&quot;<\/code>. \u0412\u0440\u043e\u0434\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u043e, <a href=\"https:\/\/github.com\/robstoll\/atrium\/blob\/v0.12.0\/apis\/differences.md#and-property\" rel=\"nofollow\">\u0437\u0430\u0447\u0435\u043c \u0442\u0430\u043a<\/a>, \u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0442\u0440\u0430\u043d\u043d\u043e. \u0425\u043e\u0442\u044f \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043f\u043e \u0431\u043e\u043b\u044c\u043d\u0438\u0446\u0435 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f infix-\u0430\u0441\u0441\u0435\u0440\u0442\u044b (\u0432\u0435\u0440\u0442\u043e\u043b\u0435\u0442\u044b \u0438\u0437-\u0437\u0430 \u0441\u043a\u0430\u043b\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e), \u0434\u043b\u044f Atrium \u044f \u043f\u0438\u0441\u0430\u043b \u0432\u043e fluent-\u0441\u0442\u0438\u043b\u0435.<\/li>\n<li>\u0427\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c: \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f: <code>notToBe<\/code>, \u043d\u043e <code>containsNot<\/code>. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u0443\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438: <code>contains<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>vararg<\/code>, \u0430 <code>containsElementsOf<\/code> \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0442\u0438\u043f, \u0441\u0434\u0435\u043b\u0430\u043b \u0442\u0443\u043f\u043e\u0439 \u043a\u0430\u0441\u0442. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0446\u0435\u043b\u044c \u043d\u0430 <code>contains(1,2,3)<\/code>, \u043d\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b. \u041e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a <code>expect(collection).containsNot.elementsOf(items)<\/code>.<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 <a href=\"https:\/\/github.com\/robstoll\/atrium\/issues\/459\" rel=\"nofollow\">\u043d\u0435\u0442<\/a>, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>toList<\/code>.<\/li>\n<li>\u041d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043b\u043e\u0432\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u044f\u0432\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c, \u0430 \u043d\u0435 reified, \u043d\u043e \u044d\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0438 \u043d\u0443\u0436\u043d\u043e: \u043c\u0430\u043b\u043e \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u0438 \u0438\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f\u043c\u0438.<\/li>\n<li>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0442\u0435\u0441\u0442 \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b.<\/li>\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: \u043d\u0435\u0442 <code>&lt;Click to see difference&gt;<\/code>.<\/li>\n<li>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438: \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u043d\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 (\u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440), \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u043e\u0435:<br \/> \n<pre><code class=\"plaintext\">expected that subject: [4, 2, 1]        (java.util.Arrays.ArrayList &lt;938196491&gt;) \u25c6\u2004does not contain: \u26ac an entry which is: 1        (kotlin.Int &lt;211381230&gt;)   \u2718\u2004\u2004number of such entries: 1       \u2004is: 0        (kotlin.Int &lt;1934798916&gt;)   \u2004\u2004has at least one element: true       \u2004is: true<\/code><\/pre>\n<\/li>\n<li>\u0422\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f: \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u043e\u0432 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043c \u044f\u0432\u043d\u044b\u0439 \u0442\u0438\u043f.<\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Hamcrest<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\n<p>\u0427\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c: \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0439 (\u043b\u0438\u0431\u043e <\/p>\n<p>  <\/p>\n<pre><code class=\"kotlin\">assertThat(actual, `is`(not(unexpected)))<\/code><\/pre>\n<p>  <\/p>\n<p>\u043b\u0438\u0431\u043e <\/p>\n<p>  <\/p>\n<pre><code class=\"kotlin\">assertThat(actual, not(unexpected))<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430\u0434\u043e \u0437\u043d\u0430\u0442\u044c \u043d\u044e\u0430\u043d\u0441 <code>containsString<\/code> vs <code>contains<\/code> vs <code>hasItem<\/code> vs <code>hasItems<\/code>. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u0443\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438: <code>hasItems<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>vararg<\/code>, \u0430 <code>Set&lt;T&gt;<\/code> \u0431\u0435\u0437 \u0437\u043d\u0430\u043d\u0438\u044f <code>T<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u043d\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0448\u044c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0446\u0435\u043b\u044c \u043d\u0430 <code>hasItems(1,2,3)<\/code>, \u043d\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432 \u0438\u0442\u043e\u0433\u0435<\/p>\n<p>  <\/p>\n<pre><code class=\"kotlin\">assertThat(collection, allOf(items.map { hasItem(it) }))<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435\u043c \u0435\u0449\u0435 \u0432\u0435\u0441\u0435\u043b\u0435\u0435: <\/p>\n<p>  <\/p>\n<pre><code class=\"kotlin\">assertThat(collection, not(anyOf(items.map { hasItem(it) })))<\/code><\/pre>\n<p>  <\/li>\n<li>\n<p>\u0412 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0432\u0430\u043a\u0445\u0430\u043d\u0430\u043b\u0438\u0438 \u0441 <code>hasItems<\/code>, \u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u00b1 \u0432 \u0433\u0440\u0430\u0444\u0443 &quot;\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438&quot;, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0431 \u043d\u0435 \u0431\u044b\u043b\u043e \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432, \u0447\u0435\u043c \u0442\u0430\u043a\u0438\u0435.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0435\u0442.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: \u043d\u0435\u0442 <code>&lt;Click to see difference&gt;<\/code>.<\/p>\n<p>  <\/li>\n<li>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438: \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u043d\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0442\u0435\u0441\u0442 \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b.<\/p>\n<p>  <\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">JUnit<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\u0427\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c: \u0419\u043e\u0434\u0430-\u0441\u0442\u0438\u043b\u044c <code>assertEquals(expected, actual)<\/code>, \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b \u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432: \u0447\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043d\u0430\u0434\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>assertArrayEquals<\/code>, \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 <code>assertIterableEquals<\/code> \u0438 \u0442.\u043f.<\/li>\n<li>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a: \u0434\u043b\u044f \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u0443 JUnit \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0431\u044b\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u044b, \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c.<\/li>\n<li>\u041f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0430: \u0447\u0435\u0440\u0435\u0437 <code>assertLinesMatch(listOf(&quot;.*$needle.*&quot;), listOf(haystack))<\/code> \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c.<\/li>\n<li>\u041e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f: \u043d\u0435\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f \u0434\u043b\u044f <code>assertLinesMatch<\/code>, \u0447\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u0435\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f \u0434\u043b\u044f <code>assertIterableEquals<\/code>.<\/li>\n<li>\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438: \u043d\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, <code>assertIterableEquals<\/code> \u0434\u043b\u044f <code>Map<\/code> \u0438 <code>Set<\/code> \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u0432\u0441\u0435\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u043c\u0443 \u0432\u0430\u0436\u0435\u043d \u043f\u043e\u0440\u044f\u0434\u043e\u043a.<\/li>\n<li>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0442\u0443\u043f\u043e \u043d\u0435\u0442.<\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">kotlin.test<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\u041e\u0447\u0435\u043d\u044c \u0431\u0435\u0434\u043d\u043e. \u0412\u0440\u043e\u0434\u0435 \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 JUnit, \u043d\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0442\u0430\u043c \u0435\u0449\u0435 \u043c\u0435\u043d\u044c\u0448\u0435. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0430\u0441\u043f\u043b\u0430\u0442\u0430 \u0437\u0430 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c.<\/li>\n<li>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0442\u0435 \u0436\u0435, \u0447\u0442\u043e \u0438 \u0443 JUnit, \u0438 \u043f\u043b\u044e\u0441 \u043a \u044d\u0442\u043e\u043c\u0443:<\/li>\n<li>\u041d\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438.<\/li>\n<li>\u041d\u0435\u0442 \u0434\u0430\u0436\u0435 \u043d\u0430\u043c\u0435\u043a\u0430 \u043d\u0430 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0432 \u043b\u0438\u0446\u0435 <code>assertIterableEquals<\/code>, \u043d\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432.<\/li>\n<li>\u0422\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f: JUnit&#8217;\u0443 \u043f\u043e\u0444\u0438\u0433 \u043d\u0430 \u0442\u0438\u043f\u044b \u0432 <code>assertEquals<\/code>, \u0430 kotlin.test \u0440\u0443\u0433\u043d\u0443\u043b\u0441\u044f, \u0447\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0442\u0438\u043f.<\/li>\n<li>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a: \u043d\u0435 \u043f\u043e \u0447\u0435\u043c\u0443 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c.<\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Expekt<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\u041c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0434\u0432\u0443\u0445 \u0441\u0442\u0438\u043b\u044f\u0445 <code>expect(x).equal(y)<\/code> \u0438 <code>x.should.equal(y)<\/code>, \u043f\u0440\u0438\u0447\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u044b\u0439. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0442\u0443\u0442 \u043d\u0438\u0447\u0442\u043e\u0436\u043d\u0430, \u0432\u044b\u0431\u0440\u0430\u043b \u0432\u0442\u043e\u0440\u043e\u0439.<\/li>\n<li>\u0427\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c: <code>contains(item)<\/code> \u043f\u0440\u043e\u0442\u0438\u0432 <code>should.have.elements(items)<\/code> \u0438 <code>should.contain.elements(items)<\/code>. \u041f\u0440\u0438\u0447\u0435\u043c \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>containsAll<\/code>. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u0443\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438: <code>should.have.elements<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>vararg<\/code>. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0446\u0435\u043b\u044c \u043d\u0430 <code>should.have.elements(1,2,3)<\/code>, \u043d\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b. \u0414\u043b\u044f \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e <code>any<\/code>: <code>.should.not.contain.any.elements<\/code>.<\/li>\n<li>\u0422\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f: \u0442\u0438\u043f \u043d\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u044f\u0432\u043d\u043e.<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 <a href=\"https:\/\/github.com\/winterbe\/expekt\/issues\/12\" rel=\"nofollow\">\u043d\u0435\u0442<\/a>.<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 <a href=\"https:\/\/github.com\/winterbe\/expekt\/issues\/6\" rel=\"nofollow\">\u043d\u0435\u0442<\/a>.<\/li>\n<li>\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u0442\u0435\u0441\u0442 \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u043b.<\/li>\n<li>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438: \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432 \u0431\u0435\u0437 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439.<\/li>\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f: \u043d\u0435\u0442 <code>&lt;Click to see difference&gt;<\/code>.<\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<h2 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>\u041b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c Kotest, Kluent \u0438 AssertJ. \u0412 \u0446\u0435\u043b\u043e\u043c \u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u043e\u043f\u0435\u0447\u0430\u043b\u0438\u043b\u0441\u044f \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0444\u0438\u0433\u043e\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u0432 Kotlin \u0438 \u0432\u0435\u0441\u044c\u043c\u0430 \u0443\u0434\u0438\u0432\u0438\u043b\u0441\u044f, \u0447\u0442\u043e \u043d\u0438\u0433\u0434\u0435 \u043a\u0440\u043e\u043c\u0435 AssertJ \u043d\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439 \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 (\u0434\u0430 \u0438 \u0442\u0430\u043c \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442). \u0414\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432 \u044d\u0442\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u044b.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u2014 \u0435\u0449\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043d\u043e \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430 \u0441\u043a\u043b\u043e\u043d\u044f\u0435\u0442\u0441\u044f \u043a AssertJ. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0438 \u0432\u0430\u043c \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0438 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432, \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u043f\u043e\u0434 \u0432\u0430\u0448\u0438 \u043d\u0443\u0436\u0434\u044b.<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/510206\/\"> https:\/\/habr.com\/ru\/post\/510206\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/510206\/\">\n<p>\u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u0442\u0430\u0440\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 \u043a\u0443\u0447\u0443 \u0431\u044b\u043b\u0438 \u043d\u0430\u0432\u0430\u043b\u0435\u043d\u044b \u0430\u0441\u0441\u0435\u0440\u0442\u044b \u0438\u0437 JUnit, kotlin.test \u0438 AssertJ. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0435\u0433\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439: \u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u043a\u0430\u043a \u043f\u0438\u0441\u044c\u043c\u043e \u0414\u044f\u0434\u0438 \u0424\u0435\u0434\u043e\u0440\u0430, \u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0435\u0434\u0438\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0418 \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0448\u043b\u043e.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u0438\u043d\u0438-\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e \u0442\u043e, \u043a\u0430\u043a\u0438\u0435 \u0430\u0441\u0441\u0435\u0440\u0442\u044b \u043b\u0443\u0447\u0448\u0435 \u043f\u043e \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c. \u0425\u043e\u0442\u0435\u043b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435: \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u0441\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u043e\u043c \u043a\u043b\u0435\u043f\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b. \u041f\u043e\u0442\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u0438\u043b \u043e\u0431\u0449\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b, \u0438 \u043a\u0430\u043a \u043f\u043e\u0435\u0445\u0430\u043b\u043e \u0432\u0441\u0435\u2026 \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u043e\u0437\u0435\u0442\u0442\u0441\u043a\u0438\u0439 \u043a\u0430\u043c\u0435\u043d\u044c \u0438 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u043c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0430\u0441\u0441\u0435\u0440\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043f\u043e\u0434 \u0432\u0430\u0448\u0438 \u0440\u0435\u0430\u043b\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0445\u0438\u0442\u0440\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0420\u0435\u0447\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u043f\u0440\u043e \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0430\u0441\u0441\u0435\u0440\u0442\u044b.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ua\/jc\/ys\/uajcysf7vtxhrmdi0de8gk8vqbi.png\"><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-306668","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/306668","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=306668"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/306668\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=306668"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=306668"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=306668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}