注入嘲笑并不适用于条款

时间:2015-01-23 17:16:59

标签: java spring mockito powermock

我必须使用自动对象测试以下类:

public class Provider {

    @Autowired
    private Service service;

    public Provider() {}

    public Provider(final Service service) {
        this.service = service;
    }

    // Other code here

}

我按如下方式创建了我的测试:

@RunWith(PowerMockRunner.class)
public class ProviderTest {

    @Mock(name="service") Service service;
    @Mock Score score;
    @InjectMocks Provider provider = new SearchResultProvider();

    @Before
    public void setup() {
        when(service.process()).thenReturn(score);
    }

    @Test
    public void my_test() {

        provider.execute(); // It fails, because service.process() returns null

        // Other code here
    }

    // Other tests here
}

然而,当我运行测试时,它失败了。一切都很好,除了(...)似乎被忽略的条款。 这导致测试在调用provider.execute()时失败。在这个函数内部执行对service.process()的调用,然后我希望返回“得分模拟”。但是返回一个空值。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

示例代码显示不需要powermock,我想有PowerMock,因为有些代码是final。但是测试不会准备要被废除的类。

我认为使用最终方法的代码是Service

public class Service {
    public final Score process() {
        throw new NullPointerException("lol");
    }
}

然后代码将不会通过,除非测试准备要废除的类:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Service.class)
public class ProviderTest {
    ...
}