mockito 无法在服务类中模拟dao

c90pui9n  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(82)

我已经为服务和控制器编写了junit 5,但我不能模拟服务和dao。它调用服务和dao类的实际方法。

@SpringBootTest(classes = {UserService.class})
@ExtendWith(MockitoExtension.class)
@ImportAutoConfiguration(RefreshAutoConfiguration.class)
public class UserServiceTest {

    @Autowired
    UserService service;

    @MockBean
    private ReadDao readDao;

    @Test
    public void getDataTest() {

        Map<String, User> userMap = new HashMap<>();
        userMap.put("Admin", new User(1,"john"));
        when(readDao.getData(any())).thenReturn(userMap);

       User user = service.getUserData();
    }
}

字符串
用户服务

@Component
public class UserService {

    @Autowired
    private ReadDao readDao;

    @Value("${app.user.role}")
    private String role;

    public User getUserData() {
        User user = null;
        try {
            user = readDao.getData("name");
        } catch (DataNotFoundException e) {
            //do nothing. return empty 
        }
        return user;
    }
}


@MockBean不是创建mock对象,而是创建实际对象,因此调用转到dao层。我错过什么了吗?同样的情况也发生在控制器上,当我试图模拟服务调用服务类的实际方法时。

djp7away

djp7away1#

这个测试不需要启动整个Spring上下文。这应该是一个简单,直接的Mockito测试:

@ExtendWith(MockitoExtension.class)
public class UserServiceTest {

    @InjectMocks
    UserService service;

    @Mock
    private ReadDao readDao;

    @Test
    public void getDataTest() {

        Map<String, User> userMap = new HashMap<>();
        userMap.put("Admin", new User(1,"john"));
        when(readDao.getData(any())).thenReturn(userMap);

       User user = service.getUserData();
    }
}

字符串

相关问题