方法

时间:2015-10-15 20:25:53

标签: java junit initialization mockito

我正在使用Mockito的whenthenReturn函数,我想知道是否有一种方法可以在测试函数中初始化对象内部。例如,如果我有:

public class fooTest {
    private Plane plane;
    private Car car;

    @Before
    public void setUp() throws Exception {          
        Mockito.when(Car.findById(eq(plane.getId()))).thenReturn(plane);
    }

    @Test
    public void isBlue() {
        plane = new Plane();
        plane.setId(2);
        Plane result = Car.findById(car);
        assertEquals(Color.BLUE, result.getColor());
    }
}

显然上面的代码不起作用,因为它抛出一个空指针异常,但想法是在每个测试函数中初始化平面对象,并让mockito when使用 对象。我想我可以在Plane对象初始化和设置之后将when行放在每个函数中,但这会使代码看起来非常难看。有没有更简单的方法呢?

1 个答案:

答案 0 :(得分:1)

由于我不知道您的PlaneCar课程,我将在test课程中做出一些假设。 我不知道你要测试的是什么,如果你正在尝试test Car,理想情况下mock你的课程不应该test。 您可以通过setUp方法以任何方式执行此类操作。

public class fooTest {

    private Plane plane;
    @Mock
    private Car car;

    @Before
    public void setUp() throws Exception {   
        MockitoAnnotations.initMocks(this);       
        plane = new Plane();
        plane.setId(2);
        plane.setColor(Color.BLUE);
        Mockito.when(car.findById(eq(plane.getId()))).thenReturn(plane);
    }

    @Test
    public void isBlue() {
       // There is no point in testing car since the result is already mocked.
        Plane result = car.findById(2);
        assertEquals(Color.BLUE, result.getColor());
    }
}