从测试访问私有变量并完成覆盖功能
Posted
技术标签:
【中文标题】从测试访问私有变量并完成覆盖功能【英文标题】:Accessing private variable from test and completing the coverage functionality 【发布时间】:2018-11-23 17:11:29 【问题描述】:我有一个名为 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】:您可以在需要时使用 Getter/Setter。您可以使用 OpenPoJo 库来测试您的 getter/setter 方法的覆盖率。
https://github.com/OpenPojo/openpojo/wiki
【讨论】:
以上是关于从测试访问私有变量并完成覆盖功能的主要内容,如果未能解决你的问题,请参考以下文章