gpt4 book ai didi

java - Mockito 模拟服务类

转载 作者:行者123 更新时间:2023-11-30 07:48:32 25 4
gpt4 key购买 nike

我想将 InjectMocks 注入(inject)我的界面而不是我的服务类,到目前为止,Mockito 是不可能的(我正在使用 Mockito 2.8.9)。我已经使用 SpringBoot 并使用 @MockBean 我能够测试服务的接口(interface)但是使用 @Mock 的 SpringMvc 我只能测试一个具体的类,为什么以及我能做什么测试服务?

有关如何将其提升到界面级别的任何建议。

@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(classes = EmployeeServiceImpl.class)
public class EmployeeServiceTest {
@org.mockito.Mock
private EmployeeDao employeeDao;

@InjectMocks
private EmployeeServiceImpl employeeService ;

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

@Test
public void SaveEmployee() throws Exception {
Employee employee = new Employee();
employee.setEmployeeName("valentine");
employee.setSalary(400);
employee.setDepartmentId(1);
employee.setEmployeeId(1);

Employee employee1 ;
when(employeeDao.addEmployee(employee)).thenReturn(employee);

employee1 = employeeService.saveEmployee(employee);

org.junit.Assert.assertNotNull(employee);
assertEquals(employee1.getSalary(), employee.getSalary());

Mockito.verify(employeeDao).addEmployee(employee);
}

最佳答案

所以我通过首先在返回 Dao 接口(interface)的 Config 类中创建 Bean 来解决这个问题

@Profile("test")
@Configuration
public class Config {

@Bean
@Primary
public EmployeeDao employeeDao(){
return Mockito.mock(EmployeeDao.class);
}
}

然后我在测试中使用了配置文件并将 configContxt 设置为我的配置类

@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes ={ EmployeeServiceImpl.class, Config.class})
public class EmployeeServiceTest1 {


@Autowired
private EmployeeDao employeeDao;

@Autowired
private EmployeeService employeeService;

关于java - Mockito 模拟服务类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49170667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com