我正在编写一个测试,尝试与一个模拟的服务进行交互。然而,我的模拟响应并没有如预期那样返回。下面是我的测试类的一个简化版本。
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Testcontainers
@ActiveProfiles("test")
@ExtendWith(MockitoExtension.class)
public class ParentServiceTest {
@InjectMocks
@Autowired
private ParentService parentService;
@Mock
private ChildService childService;
@BeforeEach
public void setUp() {
MockitoAnnotations.openMocks(this);
Mockito.when(childService.getResponse(Mockito.any(String.class), Mockito.any(DTO.class))).thenReturn(otherDto);
}
@Test
public void createAnswerTEST_Successful() {
OtherDTO result = parentService.doSomething(someString, dto);
// 这里可以添加断言来验证result是否符合预期
}
}
然后,ParentService
的样子是这样的:
@Service
public class ParentService {
private final ChildService childService;
public ParentService(ChildService childService) {
this.childService = childService;
}
public OtherDTO doSomething(String someString, DTO dto) {
// 在这里应该接收到模拟的对象
return childService.getResponse(someString, dto);
}
}
至于 ChildService
:
@Service
public class ChildService {
public OtherDTO getResponse(String someString, DTO someDto) {
// 实际逻辑返回otherDTO
}
}
我所观察到的问题是:
在调试测试并在此之前停止时,我可以在调试器中看到类似这样的信息:ChildService childService = {ChildService@21915}
,同时在 ParentService
中也有类似的实例信息,比如 ChildService childService = {ChildService@21990}
。这表明模拟对象实际上并未被注入,因为在 ParentService
中的 ChildService
实例与模拟对象不是同一个。