【发布时间】:2020-05-26 15:30:02
【问题描述】:
在为Controller类编写测试用例时,私有方法getServiceContext()。有不同的对象,因为 我们从 testclass 传递 serviceContext 和控制器类中的其他对象本身调用自身。由于这个 Foo 对象为空。如何解决这个问题。
公共类控制器{
@Refernce
private FooService fooService;
public CustomData getDetails(String id){
Foo foo = fooService.getFoo(id ,**getServiceContext()**);
//getServiceContext() is different object
System.out.println("foo data>>>> "+foo); // **Throwing null pointer exceptions**
CustomData customData = new CustomData();
customData.setStudentName(foo.getName);
customData.setStudentName(foo.getId);
...
...
...
return customData;
}
private ServiceContext getServiceContext() {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(context..);
serviceContext.setUserId(context..);
...
....
retrn serviceContext;
}
}
公共类 ControllerTest {
@InjectMocks
private Controller controller;
@Mock
private FooService fooService;
private Foo foo;
@BeforeEach
public void setUp() throws PortalException {
foo = mock(Foo.class);
}
@Test
public void getDetailsTest() throws Exception {
ServiceContext **serviceContext** = new ServiceContext();
serviceContext.setCompanyId(context..);
serviceContext.setUserId(context..);
...
....
Mockito.when(fooService.getFoo("testId",serviceContext)).thenReturn(foo);
System.out.println("Service context>>>> "+**serviceContext**); // different serviceContext object
CustomData customData = controller.getDetails("testId");
Assertions.assertThat(ss).isNotNull();
}
}
【问题讨论】:
标签: mockito junit5 liferay-7 junit-jupiter