我在嘲笑这种方法时做错了什么?

时间:2015-05-23 01:14:33

标签: java testng mockito

这是我的测试类的片段。

class MyClassTest {
    MyClass my;
    HandlerA handlerA;
    HandlerB handlerB

    @BeforeTest
    public void setUp() {

        handlerA = mock(HandlerA.class);
        handlerB = mock(HandlerB.class);
        my = new MyClass(handlerA, handlerB);
    }

    @Test
    public void testhandlerABuilderNegativeCase() {

        Shapes s = getShapes();
        Types t = my.buildTypes();
        when(handlerA.handle(s, t)).thenReturn(Response.status(500).type(MediaType.APPLICATION_JSON).build());//ineffective.

        Assert.assertFalse(my.handlerABuilder());
    }

    Shapes getShapes() {
        //returns shapes;
    }
}

这是我的主要课程。

public class MyClass {

    MyClass(HandlerA handleA, HandlerB handleB) {
        this.handleA= handleA;
        this.handleB= handleB;
    }
    ...
    boolean handlerABuilder() {
        Types t = buildTypes();
        Shapes s = getShapes();
        Response resp = handleA.handle(s,t);// resp is always null. despite using when to set 
        return (resp.getStatus==200); // throws NPE
    }
    Types buildTypes(){
        //return types.
    }

    Shapes getShapes() {
        //return shapes.
    }
}

我得到NullPointerException,因为when似乎没有正确执行。因此,响应始终返回null。有关为什么会发生这种情况的任何想法?我也尝试过调试,但它似乎没什么帮助。

1 个答案:

答案 0 :(得分:1)

为什么你关心传递给handle的是什么?你无论如何都要嘲笑 的结果,所以没有理由担心传递任何特定的东西。

可能发生的事情是您将null传递给它,并且没有得到很好的处理。

您可以做的是改变when条件以匹配any对象。

when(handlerA.handle(any(Shapes.class), any(Types.class)))
   .thenReturn(Response.status(500).type(MediaType.APPLICATION_JSON).build());