Grails 単体テスト:なぜこのステートメントは失敗するのでしょうか?
-
23-09-2019 - |
質問
私は過去に Java で開発したことがありますが、現在は Grails/Groovy を学ぼうとしています。 この少し古いチュートリアル.
import grails.test.*
class DateTagLibTests extends TagLibUnitTestCase {
def dateTagLib
protected void setUp() {
super.setUp()
dateTagLib = new DateTagLib()
}
protected void tearDown() {
super.tearDown()
}
void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
// NOTE: This statement fails
assertEquals("the years dont match and I dont know why.", expected, dateTagLib.thisYear())
}
}
DateTagLibTests.groovy
(注記: この TagLibUnitTestCase は Grails 1.2.1 用であり、 チュートリアル)
何らかの理由で、上記のテストは次のように失敗します。
予想:<2010> でしたが:<2010>
上記のテストを次の代替バージョンのテストに置き換えてみましたが、テストは問題なく成功しました。
void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
String actual = dateTagLib.thisYear()
// NOTE: The following two assertions work:
assertEquals("the years don\'t match", expected, actual)
assertTrue("the years don\'t match", expected.equals(actual))
}
これら 2 つのバージョンのテストは基本的に同じものですよね?
Grails 1.2.1 または Groovy に私が理解できない新しい点がある場合を除きます。値は両方とも によって返される値であるため、同じ型である必要があります。 Calendar.getInstance().get(Calendar.YEAR)
解決
dateTagLib.thisYear(から返されたオブジェクト)は、文字列であってはならない。
試してみてください
assertEquals("the years dont match and I dont know why.", expected, dateTagLib.thisYear().toString())
あなたの作業例では、Groovyのは、あなたのためのStringに.thisYearを()に変換されます。
dateTagLib.thisYearをプリントアウト()。クラスを確認する。
歓声
リー
所属していません StackOverflow