2017-01-30 35 views
2

下面是示例代碼,如果這項工作我可以在我的業務代碼中使用相同的邏輯。如何模擬字符串數組

class A{  
public String[] getString(String[] a){ 
    System.out.println("called"); 
    return a; 
}} 

class B{ 
A a;  
public String[] getString(){ 
    String[] ab = {"inside main class"}; 
    a= new A(); 
    return a.getString(ab); 
} 
} 

的Junit:

public class test{ 
private MockMvc mockMvc; 
@Mock 
private A a; 

@InjectMocks 
private B b; 

@Before 
public void setUp() { 
    MockitoAnnotations.initMocks(this); 
    mockMvc = MockMvcBuilders.standaloneSetup(b).build(); 
} 

@Test 
public void test2Object(){ 
    String[] bc = {"mock main class"};  
    Mockito.when(a.getString(Mockito.any(String[].class))).thenReturn(bc); 
    System.out.println((b.getString())[0]); 
} 
} 

預期的O/P 「模擬主類」,但我得到的 「主類中」

任何人都可以請幫我解決這個問題。

回答

0

您正在注入A的模擬,但在B的getString方法中,您正在創建一個新的A實例並對其進行處理。刪除它和嘲笑的版本將被稱爲:

class B{ 
    A a;  
    public String[] getString(){ 
     String[] ab = {"inside main class"}; 
     // a= new A(); 
     return a.getString(ab); 
    } 

    public void setA(A a){this.a = a;} 
} 

我會建議添加一個setter,以便在生產中可以以某種方式注入。

更新

你的測試類想是這樣的:

public class test{ 

    @Mock 
    private A a; 

    @InjectMocks 
    private B b; 

    @Before 
    public void setUp() { 
    MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void test2Object(){ 
     // Arrange 
     String[] bc = {"mock main class"};          
     Mockito.when(a.getString(Mockito.any(String[].class))) 
       .thenReturn(bc); 

     // Act 
     String result = b.getString()[0]; 

     // Assert 
     assertEquals(result, bc[0]); 
    } 
} 
+0

謝謝你,但是如果我做vefify我得到錯誤 Mockito.verify(一).getString( Mockito.any(字符串[]類。)); 錯誤:「想要但不被調用」,但工作正常,當我使用 –

+0

你可以發佈整個方法? –

+0

@Test \t public void test2Object(){ \t \t String [] bc = {「mock main class」}; Mockito.verify(a).getString(Mockito.any(String []。class)); ((b.getString())[0]); \t} base class class B { \t A a; \t \t public String [] getString(){ \t \t String [] ab = {「main main class」}; \t \t String str =「」; \t \t // a = new A(); \t \t return a.getString(ab); \t}} 錯誤 通緝但未調用: a.getString(); –

相關問題