java - 从测试访问私有变量并完成覆盖功能
问题描述
我有一个名为 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 用于私有变量。那么,我该如何为这门课写测试呢?
解决方案
您可以在需要时使用 Getter/Setter。您可以使用 OpenPoJo 库来测试您的 getter/setter 方法的覆盖率。
推荐阅读
- asp.net-mvc - 在视图中显示下拉列表
- elasticsearch - 比较有和没有分数计算的查询
- react-native - ReactNative:适用于 Android 和 iOS 的自定义复选框
- regex - 正则表达式替换。井号标签“标签:”分隔符之后的所有单词
- python - 具有多个 groupby 的 pandas pivot 数据框
- angular - Angular Guard 重定向到根目录
- rust - 包装 Rustson 响应并避免重复特征的最“生疏”方式?
- opengl - OpenGL - 将多个图像加载到纹理
- database - 如何从问号绑定 pdo 键和值?
- sql - JOIN 中的条件 IIF