首页 > 解决方案 > 想要模拟属于另一个类的依赖项

问题描述

我要测试的是来自 UserServiceImpl 类的 abc() 方法。在该方法中,它调用属于 UserDao 依赖项的 xyz()。在 UserDao 类中,它具有 UserRepository 的依赖关系,并且 xyz() 方法使用它。那么当我测试 abc() 方法时如何模拟 UserRepository 依赖项?非常感谢任何形式的帮助。

    public class UserServiceImpl{

    @Autowired
    UserDao userDao;

    public void abc(){
        userDao.xyz("a");
    }
    }

    public class UserDao{

    @Autowired
    UserRepository userRepository;

    public void xyz(String a){
        Optional<User> userOptional = userRepository.findByName("mike");
    }
    }

标签: spring-bootunit-testingjunitmockingmockito

解决方案


如果你想测试UserServiceImpl.abc()然后模拟UserDao并定义一个返回值,UserDao.xyz()我看到你有void没有参数的方法,但是对于这个例子有String作为参数并返回一个User.

@ExtendWith(SpringExtension.class)
@SpringBootTest(classes={UserServiceImpl.class})
public class UserServiceImplTest{

    @Autowired
    UserServiceImpl userSvc;

    @MockBean
    UserDao userDao;
    
    @Test
    public void abcTest(){
        //define User to return and the mock
        User userToReturn = new User("Mike");

        when(userDao.xyz("mike")).thenReturn(userToReturn);
        User retUser=userSvc.abc("mike");

        //do some assertion...

    }
}

如果您想测试 UserDao,请在其自己的 Test 类中执行此操作。


推荐阅读