单元测试如何使用Mockito模拟存储库

我存根我的存储库时遇到问题。建议我仅创建另一个application.properties(我尚未完成),并使用内存数据库(例如H2)。我想知道是否可以仅对调用进行存根处理,以便在调用myDataService.findById(id)而不是尝试从数据库中获取该对象时,是否可以返回模拟对象?


一般来说,我是为单元测试和Spring Boot编写模拟游戏的新手,所以也许我错过了一些东西。下面的代码(为简化起见,使名称通用,可在此处发布)。


我的考试课


public class MyServiceImplTest 

{

    private MyDataService myDataService;

    private NyService myService;

    private MyRepository myRepository;


    @Before

    public void setUp() {

        myDataService = Mockito.mock(MyDataServiceImpl.class);

        myService = new MyServiceImpl(myDataService);

    }


    @Test

    public void getById_ValidId() {

        doReturn(MyMockData.getMyObject()).when(myDataService).findById("1");

        when(myService.getById("1")).thenReturn(MyMockData.getMyObject());

        MyObject myObject = myService.getById("1");


        //Whatever asserts need to be done on the object myObject 

    }

}

用于对数据层进行服务调用的类


@Service

public class MyServiceImpl implements MyService {

    MyDataService myDataService;


    @Autowired

    public MyServiceImpl(MyDataService myDataService) {

        this.myDataService = myDataService;

    }


    @Override

    public MyObject getById(String id) {

        if(id == null || id == "") {

            throw new InvalidRequestException("Invalid Identifier");

        }


        MyObject myObj;

        try {

            myObj = myDataService.findById(id);

        }catch(Exception ex) {

            throw new SystemException("Internal Server Error");

        }


        return myObj;

    }

}

这是我测试中遇到的问题。调用findById()方法时,变量存储库为null,因此在尝试执行repository.findOne(id)时会抛出异常。这是我试图模拟的内容,但是存储库给了我一些问题。


@Repository

@Qualifier("MyRepo")

public class MyDataServiceImpl {


    @PersistenceContext

    private EntityManager em;


    private MyRepository repository;


    @Autowired

    public MyDataServiceImpl(MyRepository repository) {

        super(repository);

        this.repository = repository;

    }



智慧大石
浏览 214回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java