2017-09-26 111 views
0

我是mockito的新手。比方說,我有這樣模擬一個類的構造函數中的方法

public class MyClass { 
    int a; 
    String b; 
    public MyClass(int a) { 
     this.a = a; 
     this.b = draw(); 
     System.out.println("class is created"); 
    } 

    public String draw() { 
     System.out.println("my"); 
     return "b"; 
    } 

    public void apple() { 
     System.out.println("apple"); 
    } 
} 

一類我使用其中的Mockito我使用構造創建類的對象編寫JUnit測試。當我設置類時,是否可以模擬draw()方法?

+0

你可以分享你的測試代碼,或者至少是它的相關部分嗎? – Mureinik

+0

你想達到什麼目的?被測試的類沒有任何對另一個對象的依賴。所以沒有什麼可以嘲笑的。 –

+0

你並不總是必須使用mockito。爲了你的情況,爲什麼你需要嘲笑任何東西。使用簡單的junit測試。 – want2learn

回答

0

不清楚你爲什麼需要這裏的Mockito。這是一個沒有Mockito的解決方案。

在您的測試與重寫draw()方法創建的MyClass一個實例:

final MyClass myClass = new MyClass() { 
    @Override 
    public String draw() { 
     return "mock data"; 
    } 
} 

// Now test your class as you want 
1

一種方式與的Mockito來測試你的類會,

import org.junit.Before; 
import org.junit.Test; 
import org.mockito.Mock; 
import org.mockito.MockitoAnnotations; 

import static org.junit.Assert.assertEquals; 
import static org.mockito.Mockito.when; 

public class TestMyClass { 

    @Mock 
    private MyClass clazz; 

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

    @Test 
    public void testDraw() { 
     when(clazz.draw()).thenReturn("My mock hello"); 
     assertEquals("My mock hello", clazz.draw()); 
    } 
} 
1

你可以轉辦部分嘲諷使用間諜(見here如何做到這一點)。

但像往常一樣:當人們開始考慮使用嘲諷框架的複雜方式時,答案是:退一步並改進您的生產代碼。你的構造函數應該只做簡單的初始化事情。

在你的情況下,一個合理的方法是:不要調用內部方法來計算該字段的值 - 但通過該值給構造函數(換句話說 - 使用依賴注入)。

而你仍然可以這樣做:

public MyClass(int a) { 
    this(a, draw()); 
} 

MyClass(int a, String b) { 
    this.a = a; ... 

現在你的單元測試可以愉快地使用構造函數是需要參數 - 和您的需要模擬東西完全消失。

相關問題