Spring Boot 如何将依赖注入到@Mock对象中?

bprjcwpo  于 2023-11-17  发布在  Spring
关注(0)|答案(1)|浏览(222)

有一个简单的ModelMapper配置:

  1. @Configuration
  2. public class ModelMapperConfig {
  3. @Bean
  4. public ModelMapper mapper() {
  5. return new ModelMapper();
  6. }
  7. }

字符串
有一个Mapper Utils类,其中包含一个小型业务逻辑,ModelMapper被注入其中:

  1. @Component
  2. @RequiredArgsConstructor
  3. public class MapperUtils {
  4. private final ModelMapper mapper;
  5. }


实现了一个需要MapperUtils的服务:

  1. @Service
  2. @Transactional(readOnly = true)
  3. @RequiredArgsConstructor
  4. public class CategoryService {
  5. private final CategoryRepository categoryRepository;
  6. private final MapperUtils mapperUtils;
  7. }
  1. @ExtendWith(MockitoExtension.class)
  2. public class CategoryServiceTests {
  3. @Mock
  4. private CategoryRepository categoryRepository;
  5. @Mock
  6. private MapperUtils mapperUtils;
  7. @InjectMocks
  8. private CategoryService categoryService;
  9. @BeforeEach
  10. public void setUp() {
  11. MockitoAnnotations.initMocks(this);
  12. }
  13. }

的字符串
现在,我想使用Mockito测试我的服务,但我不太明白如何在MapperUtils对象中放置另一个ModelMapper依赖项,该依赖项带有@Mock注解,用于带有@InjectMocks注解的CategoryService

ma8fv8wu

ma8fv8wu1#

在试用环境中使用来自Mockito等mocking框架的@Mock注解时,现在不可能直接将实际依赖项注入@Mock对象。mocking的原因是模拟依赖项的行为,以隔离测试下的单元。但是,您可以设置mock对象,以根据测试用例的需要返回唯一值或行为。
下面是一个如何使用Mockito来安装模拟项目的例子:

  1. @RunWith(MockitoJUnitRunner.class)
  2. public class MyTest {
  3. @Mock
  4. private MyDependency myDependency;
  5. @Test
  6. public void myTest() {
  7. // Setting up a behavior for the mocked dependency
  8. Mockito.when(myDependency.someMethod()).thenReturn("Some value");
  9. // Your test code that uses the mocked dependency
  10. }
  11. }

字符串
在上面的例子中,MyDependency被模仿使用@Mock注解。MyDependency的someMethod的行为是使用Mockito.When和thenReturn方法描述的。这允许您指定在测试执行过程中调用方法时应该返回的内容。
如果你需要检查下面的单元take a look at和一个真实的依赖之间的相互作用,你可能需要记住在@Mock旁边使用@InjectMocks注解来机械地将模拟的依赖注入到检查下的单元中。然而,这种技术不再允许将真实的依赖注入到模拟中。

展开查看全部

相关问题