我必须使用自动对象测试以下类:
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()的调用,然后我希望返回“得分模拟”。但是返回一个空值。
我做错了什么?
答案 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 {
...
}