如何在不影响真实数据的情况下执行Junit测试?

时间:2018-11-23 11:00:48

标签: java eclipse junit

我目前被分配为一个项目创建Junit测试。我创建了一些测试,但是在阅读了一些最佳实践之后,我发现Junit测试不应该影响真实数据,因为它可以构成数据的完整性。

下面的一个测试示例测试存储库中现有用户数据的编辑:

@Test
    void EditUserTest()
    {
        UserController userController = new UserController();
        List<User> userList = (List<User>) userController.getCurrentUserlist();

        RoleController roleController = new RoleController();
        List<Role> roleList = (List<Role>) roleController.GetCurrentRolelist();

        User selectedUser = userList.get(0);

        selectedUser.setLoginName("EditedLoginName");
        selectedUser.setFirstName("EditedFirstName");
        selectedUser.setLastName("EditedLastName");
        selectedUser.setEmployeeID(555555555);
        selectedUser.setRole(roleList.get(6));
        selectedUser.setAutoLogoutPeriod(6);
        selectedUser.setEksSerial("45f869");
        selectedUser.setEksLevel(9);
        User NonExistent = new User();       

        assertTrue(userController.EditUser(selectedUser), "Testing edit to User in repository");
        assertFalse(userController.EditUser(NonExistent), "Testing edit to Non-Existent User in repository");

        User editedUser = userController.GetUser(selectedUser.getID());

        assertEquals("EditedLoginName", editedUser.getLoginName(), "Testing edit to User Login name");
        assertEquals("EditedFirstName", editedUser.getFirstName(), "Testing edit to User First name");
        assertEquals("EditedLastName", editedUser.getLastName(), "Testing edit to User Last name");
        assertEquals(55555555, editedUser.getEmployeeID(), "Testing edit to User Employee ID");
        assertEquals(roleList.get(6), editedUser.getRole(), "Testing edit to User Role");
        assertEquals("45f869", editedUser.getEksSerial(), "Testing edit to User Eks Serial");   
        assertEquals(9, editedUser.getEksLevel(), "Testing edit to User Eks Level");    
    }

如您所见,我检索了存储库中的当前用户列表,并仅获取第一个。更改其值后,我然后使用控制器对存储库进行实际编辑,然后从存储库中检索同一用户以进行比较,并查看是否实际进行了编辑。现在,我将如何测试同一件事,而又不影响存储库中的实际数据?

2 个答案:

答案 0 :(得分:0)

单元测试不应访问真实数据。您需要模拟任何此类数据,以便不影响实际数据。

单元测试的目的是测试功能,它不依赖于实际数据。

您可以查看Mockito,以模拟表现出实际对象行为的对象。

此链接可能会有所帮助:Official docs

答案 1 :(得分:0)

如果您正在编写单元测试,则您的测试应仅专注于要测试的组件,这意味着,如果您在测试控制器层,则不应调用服务层或dao层并使用其功能。

假设您要测试您的控制器,然后应该使用Mockito或任何其他测试框架来模拟服务层。通过模拟,您基本上可以避免实际的服务调用,而继续进行控制器级别的测试。

This example will help