2013-01-22 15 views
6

mockito/powermock ile özel bir yöntemle alay etmeye çalışıyorum. Ben olsun NullPointerException
ben yapmaya çalışıyorum basit bir örnek:mockito ve powermock ile özel bir yöntemle alay etmeye çalışırken java.lang.NullPointerException'ı alın

Gerçek sınıf

import com.siriusforce.plugin.common.PluginSystem; 
import com.wellsfargo.core.business.service.dp.fulfillment.MockitoBusinessService; 

public class MockitoBusinessOperationImpl implements MockitoBusinessOperation{ 
    private MockitoBusinessService mockitoBusinessService = PluginSystem.INSTANCE.getPluginInjector().getInstance(MockitoBusinessService.class); 
    private Long Id; 

    public String creditAproved(Long Id){ 
     System.out.println("Came Inside MockitoBusinessOperationImpl"); 
     this.Id = Id; 
     if (this.Id != null){ 
      System.out.println("Inside creditaproved If statement"); 
      String Report = mockitoBusinessService.creditReport(this.Id); 
      System.out.println("Mock Object Injected from test class "+ Report); 
      return Report; 
     } else 
      return "Went to Else Part"; 
    } 

    private String inTestMethod(Long Id){ 
     return "this is working"; 
    } 
} 

Testi Sınıfı:

import static org.mockito.Mockito.spy; 
import static org.mockito.Mockito.when; 
import static org.powermock.api.mockito.PowerMockito.doReturn; 

import org.mockito.InjectMocks; 
import org.mockito.Mock; 
import org.mockito.MockitoAnnotations; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.testng.annotations.BeforeMethod; 
import org.testng.annotations.Test; 

import com.siriusforce.plugin.common.PluginSystem; 

public class MockitoBusinessServiceTest { 

    @Mock 
    MockitoBusinessService MockitoBusinessService ; 

    @InjectMocks  
    private MockitoBusinessOperation MockitoBusinessOperation = PluginSystem.INSTANCE.getPluginInjector().getInstance(MockitoBusinessOperation.class); 

    private Long Id; 

    @BeforeMethod 
    public void init() { 
     MockitoAnnotations.initMocks(this); 
     this.Id = 123L; 
    } 

    @PrepareForTest(MockitoBusinessOperation.class) 
    @Test(enabled = true) 
    public void testReCalculatePrepaids() throws Exception { 
     MockitoBusinessOperation = spy(MockitoBusinessOperation); 
     doReturn("this will work hopefully").when(MockitoBusinessOperation, "inTestMethod", this.Id); 

     when(MockitoBusinessService.creditReport(this.Id)).thenReturn(new String("Decline by only Me")); 

     String mainReport = MockitoBusinessOperation.creditAproved(this.Id); 
     System.out.println("Indirect Call from actual class MainReport " + mainReport); 

    } 
} 

Ben olsun bu çalıştırmayı denediğinizde Bir NullPointerException: bu veya başka bir yolla özel bir yöntemle ilgilenen herhangi bir öneri. Yöntemi korumalı yapmak için verilen öneriyi kullanmak, yani gerçek yöntemi değiştirmek anlamına gelmez. Ben Sen PowerMockito.spy() yerine Mockito.spy() kullanmalıdır gerçek

class method 
    <failure type="java.lang.NullPointerException">java.lang.NullPointerException 

at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addAnswersForStubbing(PowerMockitoStubberImpl.java:68) 

at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.prepareForStubbing(PowerMockitoStubberImpl.java:123) 

at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:91) 

at com.wellsfargo.core.business.service.dp.fulfillment.MockitoBusinessServiceTest.testReCalculatePrepaids(MockitoBusinessServiceTest.java:54) 

+1

ithal etmek: gün casusluk yöntemine PowerMockito ekleyerek. 'MockitoBusinessOperation = PowerMockito.spy (MockitoBusinessOperation);' Şimdi özel yöntemle alay etmeme rağmen özel yöntemle alay etmekteydi ama yine de hala çağrı yapıyor. [Başka bir gönderide] (http://stackoverflow.com/questions/8057607/when-mocking-private-method-with-powermock-but-underlying-method-still-gets-cal?rq=1) birisi bunu gönderdi konu. ama çözüm benim için çalışmıyor. herhangi bir öneri, sahte olmanın neden olduğu gibi yansımadığı anlamına gelir. – jan

+0

DoWhen() tarzı alay mı kullanıyorsunuz? Yeni bir kod örneği gönderebilir veya sorunuzu değiştirebilir misiniz? –

cevap

11

herhangi bir değişiklik istemiyoruz!

deneyin ben NullPointerException anlamaya static org.powermock.api.mockito.PowerMockito.spy;