注入模拟不适用于 when 子句



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

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
}

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

我做错了什么?

示例代码显示不需要 powermock,我想有 PowerMock,因为有些代码final.但是测试不会准备要取消定档的课程。

我假设带有最终方法的代码是Service

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

然后代码不会通过,除非测试准备要取消定档的类:

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

相关内容

  • 没有找到相关文章

最新更新