有一个简单的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
1条答案
按热度按时间ma8fv8wu1#
在试用环境中使用来自Mockito等mocking框架的@Mock注解时,现在不可能直接将实际依赖项注入@Mock对象。mocking的原因是模拟依赖项的行为,以隔离测试下的单元。但是,您可以设置mock对象,以根据测试用例的需要返回唯一值或行为。
下面是一个如何使用Mockito来安装模拟项目的例子:
字符串
在上面的例子中,MyDependency被模仿使用
@Mock
注解。MyDependency的someMethod的行为是使用Mockito.When和thenReturn方法描述的。这允许您指定在测试执行过程中调用方法时应该返回的内容。如果你需要检查下面的单元take a look at和一个真实的依赖之间的相互作用,你可能需要记住在@Mock旁边使用@InjectMocks注解来机械地将模拟的依赖注入到检查下的单元中。然而,这种技术不再允许将真实的依赖注入到模拟中。