首页 > 解决方案 > 从测试访问私有变量并完成覆盖功能

问题描述

我有一个名为 FilterSite 的类,它有一个 UserDao 类型的实例变量。因为 userDao 变量只在这个类中使用,所以我把它设为私有。

测试时,我通过 setter 方法设置这个私有 userDao。UserDao 从数据库中获取数据并在 filterData() 中使用。

class FilterSite {
 @Autowired
    private UserDao userDao;

   public void filterData(HttpServletRequest request, HttpServletResponse response) {
   User user = userDao.findByUsername(request.getParameter("username")
     if( user != null && request.getParameter("site").equalsIgnoreCase(user.getSite())) {
         //do something
    }
   }

 public void setUserDao(UserDao dao) {
        this.userDao = dao;
   }
    }

我有一个名为 TestFilterSite 的测试类,它创建一个随机 userDao 并设置 FilterSite 类 userDao。

public class TestFilterSite {
    @Mock
    UserDao userDao;

@Before
        public void setup(){
            MockitoAnnotations.initMocks(this);
            Mockito.when(userDao.findByUsername(validUsername)).thenReturn(createUser());


               User user = userDao.findByUsername(validUsername);
                Assert.assertEquals(validUsername,user.getUsername());
                Assert.assertEquals(validPassword,user.getPassword());
                Mockito.verify(userDao).findByUsername(validUsername);
            }

      @Test
      public void testFilterSiteWhenBlankSiteIsProvided(){
        FilterSite filterSite = new FilterSite();
        filterSite.setUserDao(userDao);
        filterSite.filterData(MockHttpServletRequest, MockHttpServletResponse);
        //assert responses

      }
        }

在阅读了一些文章后,我发现在编写测试类时我不应该将 getter/setter 用于私有变量。那么,我该如何为这门课写测试呢?

标签: javaunit-testingdaoprivate-members

解决方案


您可以在需要时使用 Getter/Setter。您可以使用 OpenPoJo 库来测试您的 getter/setter 方法的覆盖率。

https://github.com/OpenPojo/openpojo/wiki


推荐阅读