模拟对象创建内部方法测试中

时间:2014-07-31 21:52:38

标签: java junit mocking mockito junit4

我有一个我想测试的类。我会尽可能地为那个依赖于其他类的对象的类进行依赖注入。但是,我遇到了一个案例,我想模拟对象而不重构代码而不是应用DI。

以下是受测试的课程:

public class Dealer {

    public int show(CarListClass car){
        Print print=new Print();

        List<String> list=new LinkedList<String>();

        list=car.getList();
        System.out.println("Size of car list :"+list.size());

        int printedLines=car.printDelegate(print);
        System.out.println("Num of lines printed"+printedLines);

        return num;
    }
}

我的测试类是:

public class Tester {
    Dealer dealer;

     CarListClass car=mock(CarListClass.class);  
     List<String> carTest;
     Print print=mock(Print.class);

    @Before
    public void setUp() throws Exception {
        dealer=new Dealer();
        carTest=new LinkedList<String>();
        carTest.add("FORD-Mustang");
        when(car.getList()).thenReturn(carTest);
        when(car.printDelegate(print)).thenReturn(9);
    }

    @Test
    public void test() {

        int no=dealer.show(car);
        assertEquals(2,number);//not worried about assert as of now

    }
}

我无法找到在Dealer类中模拟打印对象的解决方案。因为,我在Test类中模拟它,但是它在测试中的方法中创建。我做了我的研究,但是没有&找不到任何好的资源。

我知道从这个方法中创建Print对象并注入对象是更好的方法,但我想测试代码,在方法内部创建print对象。有什么方法可以做此

1 个答案:

答案 0 :(得分:2)

如果您只想模拟car.printDelegate()的返回值,那么如何模拟该调用的任何Print实例?

when(car.printDelegate(org.mockito.Matchers.any(Print.class))).thenReturn(9);

顺便说一句,我对以下代码感到困惑: -

List<String> list=new LinkedList<String>(); // allocate a empty list worth 
list=car.getList();                         // nothing but wasting memory.
...
return num; // no definition, do you mean printedLines?