2017-09-26 56 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; ... 

现在你的单元测试可以愉快地使用构造函数是需要参数 - 和您的需要模拟东西完全消失。

相关问题