2012-02-29 5 views
0

Я пытаюсь издеваться класс как так (спасибо такое Google для разработки кода, который трудно использовать в тестовой среде):EasyMock 3 с классом:

GoogleAuthorizationCodeGrant googleAuthorizationCodeGrant = EasyMock.createMock(GoogleAuthorizationCodeGrant.class); 

Тогда я создания макета вызова метода как это:

AccessTokenResponse accessTokenResponse = new AccessTokenResponse(); 
EasyMock.expect(googleAuthorizationCodeGrant.execute()).andReturn(accessTokenResponse); 

Тем не менее он извергает исключение, потому что во время googleAuthorizationCodeGrant.execute() она пытается запустить фактический код в googleAuthorizationCodeGrant.execute(). Я что-то упустил? Я ожидал бы, что прокси-сервер cglib обернет этот класс и переопределит его методы, чтобы ничего не делать, поскольку я не хочу их реализации, когда насмехается. Не должно быть необходимости в том, чтобы какая-либо из бизнес-логики оставалась, поскольку я определяю поведение различных вызовов методов.

Редактировать

Примечание - Я думаю, что есть какая-то путаница здесь. Исключение на:

EasyMock.expect(googleAuthorizationCodeGrant.execute()).andReturn(accessTokenResponse) 

Не тогда, когда я ставлю Ложный в режиме воспроизведения, так как я никогда не достичь этого кода. Причина, по которой возникает исключение, заключается в том, что член GoogleAuthorizationCodeGrant имеет значение NULL, и на него вызывается метод .execute(). Член не был бы пустым, если бы я создал GoogleAuthorizationCodeGrant с новым оператором. Однако я не понимаю, почему EasyMock будет работать так, как в классе, потому что я ожидаю, что он создаст прокси-сервер, который обертывает реализацию, чтобы ничего не делать.

Вот трассировки стека:

java.lang.NullPointerException 
at com.google.api.client.auth.oauth2.draft10.AccessTokenRequest.executeUnparsed(AccessTokenRequest.java:451) 
at com.google.api.client.auth.oauth2.draft10.AccessTokenRequest.execute(AccessTokenRequest.java:475) 
at uk.co.domain.service.google.GmailContactPollerTest.testDoPoll(GmailContactPollerTest.java:64) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
+0

Вы можете добавить трассировку стека из исключения в вопрос? – Alb

+0

Установили ли вы объект Mock для воспроизведения? –

ответ

1

Я не уверен, переигрывали ли вы назад, что Передразнивало экземпляр. Если вы уже сделали это и все еще получаете исключение, поместите трассировку стека.

+0

След стека добавлен – mogronalol

+1

В строке 451 AccessTokenRequest вы вызываете метод googleAuthorizationCodeGrant.execute(), если вы так ввели в класс AccessTokenRequest посмеянный GoogleAuthorizationCodeGrant. Если нет, он будет вызывать исходный код GoogleAuthorizationCodeGrant. Несмотря на то, что EasyMock создал прокси для этого класса, вам нужно передать этот макет вызывающему классу, чтобы исходный GoogleAuthCodeGrant не был выполнен. – raddykrish

Смежные вопросы