2014-06-06 24 views
8

Tôi theo dõi những gì @hoaz đề xuất. Tuy nhiên, tôi nhận được nullpointer ngoại lệMockito NullPointerException

@RunWith(MockitoJUnitRunner.class) 
public class GeneralConfigServiceImplTest { 

@InjectMocks private GeneralConfigService generalConfigService; 
@Mock private SomeDao someDao; 
@Mock private ExternalDependencyClass externalDependencyObject 

@Test 
public void testAddGeneralConfigCallDAOSuccess() { 
    when(someDao.findMe(any(String.Class))).thenReturn(new ArrayList<String>(Arrays.asList("1234"))); 

    //println works here, I am able to get collection from my mocked DAO 

    // Calling the actual service function 
    generalConfigService.process(externalDependencyObject) 
    } 
} 

Trong Mã của tôi nó như thế này:

import com.xyz.ExternalDependencyClass; 

public class GeneralConfigService{ 

private SomeDao someDao; 

public void process(ExternalDependencyClass externalDependencyObject){ 

// function using Mockito 
Collection<String> result = someDao.findMe(externalDependencyObject.getId.toString()) 
    } 
} 

Tôi cũng nhận thấy rằng DAO là rỗng vì vậy tôi đã làm điều này (Chỉ cần đề cập đến, tôi đã làm các bước dưới đây để cố gắng, tôi biết sự khác biệt giữa springUnit và Mockito hoặc xyz):

@Autowired 
private SomeDao someDao; 


giải pháp @ John B giải quyết vấn đề của tôi. Tuy nhiên tôi muốn đề cập đến những gì đã không làm việc cho tôi. Đây là cập nhật đơn vị thử nghiệm của tôi

@Test 
public void testAddGeneralConfigCallDAOSuccess() { 
    /* 
    This does not work 
    externalDependencyObject.setId(new ExternalKey("pk_1")); 
    // verify statement works and I thought that the class in test when call the getId 
    // it will be able to get the ExternalKey object 
    //verify(externalDependencyObject.setId(new ExternalKey("pk_1"))); 
    */ 

    // This works 
    when(externalDependencyObject.getId()).thenReturn(new ExternalKey("pk_1")); 
    when(someDao.findMe(any(String.Class))).thenReturn(new ArrayList<String>(Arrays.asList("1234"))); 

    .... 
    // Calling the actual service function 
    generalConfigService.process(externalDependencyObject) 
    } 


Được tham chiếu câu hỏi này trong:

How do I mock external method call with Mockito

How do I set a property on a mocked object using Mockito?

+3

Tại sao bạn chế nhạo thứ gì đó mà bạn đang tự động? Nó * mùi * như thế này nên là một thử nghiệm tích hợp kiểu Spring tinh khiết, hoặc một thử nghiệm mô hình thuần túy. – Makoto

+0

Tôi đã cố gắng thực hiện bước @Autowired vì tôi đã chạy vào ngoại lệ của NullPointer, nhưng nó đang chạy vào ngoại lệ ngay cả sau đó. Tôi thấy rằng khi 'someDao.findMe (someObject.getId.toString())' thực hiện nó KHÔNG kích hoạt câu lệnh trả về MockDao của tôi, mà thay vào đó cố gắng đánh giá 'someObject.getId.toString()'. Khi tôi đã println trong thử nghiệm cho 'someDao.findMe' nó sẽ trả về bộ sưu tập. Tôi cũng đã kiểm tra việc gỡ lỗi, 'someDao' đã được đặt thuộc tính thành generalConfigService. Vì vậy, không chắc chắn lý do tại sao nó đánh giá và không chỉ trả lại bộ sưu tập của tôi – Anuj

Trả lời

10

Bạn chưa chế giễu hành vi của getId trong externalDependencyObject do đó nó đang trở lại null và cung cấp cho bạn NPE khi toString() được gọi trên sốđó.

Bạn cần một when(externalDependencyObject.getId()).then...

Các vấn đề liên quan