从测试中访问私有变量并完成覆盖功能

时间:2018-06-14 02:25:55

标签: java unit-testing dao private-members

我有一个名为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作为私有变量。 那么,我该如何为这门课写测试?

1 个答案:

答案 0 :(得分:-1)

您可以在需要的地方使用Getter / Setter。你可以使用OpenPoJo库来测试你的getter / setter方法。

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