私は、HTTP呼び出しを行うことによって、サードパーティのサービスを使用して電子メールを送信Grailsのサービスを持っていますHibernateと私は必要としない、ドメイン全体の枠組み、):私はこのユニットテストを実行したとき、それはas JSON
変換を行うことをしようとしたときコンバータを使用するGrailsサービスを単体テストする方法を教えてください。私は統合テストがスピンアップするので(このサービスをテストするためのユニットテストを書いた</p> <pre><code>class EmailService { def sendEmail(values) { def valueJson = values as JSON ... // does HTTP call to 3rd party service } } </code></pre> <p>:
@TestFor(EmailService)
class EmailServiceTests {
void testEmailServiceWorks() {
def values = [test: 'test', test2: 'test2']
service.sendEmail(values)
}
}
はしかし、それはこの例外で失敗します
org.apache.commons.lang.UnhandledException:org.codehaus.groovy.grails.web.converters.exceptions.ConverterException:クラスのUnconvertableオブジェクト:java.util.LinkedHashMap
私はその後、私の再書いユニットテストは、ちょうど次の操作を実行します
void testEmailServiceWorks() {
def value = [test: 'test', test2: 'test2']
def valueJson = value as JSON
}
そして、それはas JSON
変換を行うことをしようとしたとき、私は同じ例外を取得します。
なぜこの例外が発生するのか誰にもわかりますが、どのように修正できますか?
これはgrails 1.3.7でどのように動作しますか?私がこれを使うとき。予期しないトークンでランタイムエラーが発生します。新しいgrails.converters。 "$ {c}"(代理人) – allthenutsandbolts
偉大な答え - 私は正しい方向に向かいました。 asTypeの構文がうまくいかなかったのに、 'c.newInstance(delegate)'が私のためにしました。 – Armand
これは動作しません。正しい解決策は、 '@TestMixin(ControllerUnitTestMixin)'アノテーションを追加することです(後述の@ Stephenの答えを確認してください)。 – mathifonseca