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

bprjcwpo  于 7个月前  发布在  Spring
关注(0)|答案(1)|浏览(92)

有一个简单的ModelMapper配置:

@Configuration
public class ModelMapperConfig {
    @Bean
    public ModelMapper mapper() {
        return new ModelMapper();
    }
}

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

@Component
@RequiredArgsConstructor
public class MapperUtils {
    private final ModelMapper mapper;
}


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

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class CategoryService {
    private final CategoryRepository categoryRepository;
    private final MapperUtils mapperUtils;
}
@ExtendWith(MockitoExtension.class)
public class CategoryServiceTests {
    @Mock
    private CategoryRepository categoryRepository;

    @Mock
    private MapperUtils mapperUtils;

    @InjectMocks
    private CategoryService categoryService;

    @BeforeEach
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }
}

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

ma8fv8wu

ma8fv8wu1#

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

@RunWith(MockitoJUnitRunner.class)
public class MyTest {

    @Mock
    private MyDependency myDependency;

    @Test
    public void myTest() {
        // Setting up a behavior for the mocked dependency
        Mockito.when(myDependency.someMethod()).thenReturn("Some value");

        // Your test code that uses the mocked dependency
        
    }
}

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

相关问题