問題タブ [expandometaclass]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
88 参照

grails - テストごとにクラスのメタクラスを変更する方法

ExpandoMetaClass を使用して、サービスが統合テストで常に成功を返すようにしていますが、実際に失敗するテストが 1 つ必要です。

ExpandoMetaClass の使用例:

注:現在、サービスはコントローラー用に定義されていませんが、それは名前が付けられたクラスを参照するSpring Beanであるため、SomeService正常に機能します。つまり、コントローラーsomeService.accessAnotherSystem()にはありません。def someService

controller.someService.metaClass.accessAnotherSystem = { return 'failure'}したがって、統合テストからはできません。

また、これは Webflow の統合テストです。

1 つのテストで metaClass をリセットすることは可能ですか? または何らかの方法で必要なものをテストすることはできますか?

0 投票する
1 に答える
296 参照

grails - Javaライブラリの動作をオーバーライドするGrailsのExpandoMetaClass?

サードパーティの Java ライブラリで Grails を使用しており、これらのライブラリの 1 つで動作をオーバーライドしたいと考えています。

次のように、Bootstrap.groovy でこれを実行しようとしました。

SimpleStringFilter クラスの passFilter メソッドが呼び出されることはわかっていますが、上記のコードにブレークポイントを設定したところ、ヒットすることはありませんでした。

参考までに、Java メソッドのシグネチャは次のとおりです。

では、ExpandoMetaClass を使用してグローバルに Java ライブラリの動作を実際にオーバーライドすることはできますか? 誰かがこのように使用することの動作とニュアンスを説明できますか?

ありがとう!