Java 调用服务方法时的模拟
我有一个SpringBoot应用程序,在那里我有一些测试。我有一个Junit测试: 以及测试:Java 调用服务方法时的模拟,java,testing,junit,mocking,mockito,Java,Testing,Junit,Mocking,Mockito,我有一个SpringBoot应用程序,在那里我有一些测试。我有一个Junit测试: 以及测试: public class FindHotelDataRequestTransformerTest { @Autowired private BackendHotelService backendHotelService; private FindHotelDataRequestTransformer tran
public class FindHotelDataRequestTransformerTest {
@Autowired
private BackendHotelService backendHotelService;
private FindHotelDataRequestTransformer transformer;
@Before
public void setUp() {
transformer = new FindHotelDataRequestTransformer( backendHotelService);
}
@Test
public void theTest() {
mock(BackendHotelService.class);
when(transformer.getHotelApplicationName()).thenReturn("NameMocked");
...
}
}
这是基于这些类的:
public abstract class HotelDataRequestTransformer {
private final BackendCredentialsService backendCredentialsService;
public HotelDataRequestTransformer(BackendCredentialsService backendCredentialsService) {
this.backendCredentialsService = backendCredentialsService;
}
public String getHotelApplicationName() {
return backendCredentialsService.getHotelApplicationName();
}
}
@Component
public class FindHotelDataRequestTransformer extends HotelDataRequestTransformer {
public FindHotelDataRequestTransformer(BackendHotelService backendHotelService) {
super (backendHotelService);
}
..
}
但是当我运行测试时,我得到了一个空指针
return backendCredentialsService.getHotelApplicationName();
因此,Mocking.when不起作用似乎是从mock本身返回的,而不是从被测试的类返回的
backendHotelService = mock(BackendHotelService.class); // also use the mock created :)
when(backendHotelService.getHotelApplicationName()).thenReturn("NameMocked");
从模拟本身返回,而不是从被测试的类返回
backendHotelService = mock(BackendHotelService.class); // also use the mock created :)
when(backendHotelService.getHotelApplicationName()).thenReturn("NameMocked");
transformer不是模拟对象—您正在创建新的transformer backendHotelService是模拟对象 尝试:
when(backendHotelService.getHotelApplicationName())。然后返回(“NameMocked”)代码>transformer不是模拟对象—您正在创建一个新的transformer
backendHotelService是模拟对象
尝试:
when(backendHotelService.getHotelApplicationName())。然后返回(“NameMocked”)代码>您需要模拟调用该对象的任何方法的结果,否则mockito将不知道返回什么。因此,您需要一个when(mockedObject.getterMethod())。然后返回()
语句以继续超过该点。您需要模拟调用该对象的任何方法的结果,否则mockito将不知道返回什么。因此,您需要一个when(mockedObject.getterMethod())。然后使用return()
语句继续超过该点。