サービスを使用して何かを行う POJO があります。
public class PlainOldJavaObject {
private IService service;
public String publicMethod(String x) {
return doCallService(x);
}
public String doCallService(String x) {
if(service == null) {
throw new RuntimeException("Service must not be null");
}
return service.callX(x);
}
public interface IService {
String callX(Object o);
}
}
そして、Groovy テスト ケースがあります。
class GTest extends GroovyTestCase {
def testInjectedMockIFace() {
def pojo = new PlainOldJavaObject( service: { callX: "very groovy" } as IService )
assert "very groovy" == pojo.publicMethod("arg")
}
def testMetaClass() {
def pojo = new PlainOldJavaObject()
pojo.metaClass.doCallService = { String s ->
"no service"
}
assert "no service" == pojo.publicMethod("arg")
}
}
最初のテスト メソッドは、testInjectedMockIFace
期待どおりに機能します。POJO は、の動的実装で作成されIService
ます。がcallX
呼び出されると、単純に「非常にグルーヴィー」を返します。このようにして、サービスはモックアウトされます。
testMetaClass
ただし、2 番目のメソッドが期待どおりに機能せず、代わりにcallX
サービス オブジェクトで呼び出そうとすると NullPointerException がスローされる理由がわかりません。メソッドを次の行で上書きしたと思いましたdoCallService
:
pojo.metaClass.doCallService = { String s ->
私は何を間違っていますか?
ありがとう!