我必须使用自动连线对象测试以下类:
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 {
...
}