我有一个spring MVC小应用程序,我需要使用JUnit测试集成一个测试方法。
我的班级模型是Page
:
@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
@Table(name="page")
public class Page implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
@Column(name = "about")
private String about;
@Column(name = "phone")
private String phone;
public int getId() {
return id;
}
// the rest of getters and setters...
}
另外,我有一个服务,它调用PageDAO接口连接到DB并获取数据:
@Service
public class PageServiceImpl implements PageService {
@Autowired
private PageDAO pageDao;
public void saveOrUpdatePage(Page page) {
pageDao.saveOrUpdate(page);
}
public Page getPage(int id) {
Page page = pageDao.get(id);
return page;
}
}
PageDAOImpl
:
@Repository("pageDAO")
public class PageDAOImpl implements PageDAO {
@Autowired
private SessionFactory sessionFactory;
@Transactional
public void saveOrUpdate(Page page) {
sessionFactory.getCurrentSession().saveOrUpdate(page);
}
@Override
@Transactional
public Page get(int id) {
String hql = "from Page where id=" + id;
Query query = this.sessionFactory.openSession().createQuery(hql);
@SuppressWarnings("unchecked")
List<Page> listPage = (List<Page>) query.list();
if (listPage != null && !listPage.isEmpty()) {
return listPage.get(0);
}
return null;
}
}
最后,我有测试课PageControllerTest
:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("web.xml")
@ContextConfiguration
public class PageControllerTest {
@Test
public void testGetPageInfo() {
Page expectedPage = new Page();
expectedPage.setName("Pivotal");
Page actualPage = new Page();
// I need here to get a Page from the database using PageService `get` method passing 1 as page ID for parameter.
assertEquals(expectedPage.getName(), actualPage.getName());
}
}
如何调用自动装配的PageService以从db获取页面并将其与expectedPage
name属性进行比较?
谢谢!
答案 0 :(得分:0)
尝试将此注释添加到测试类
@ContextConfiguration("classpath:your-spring-beans-config-file-path.xml")
将服务自动装配到@test类,
@Autowired
PageService pageService;
答案 1 :(得分:0)
您可以在测试类中注入依赖项,就像在任何控制器,服务或DAO类中一样:
@Autowired
private PageService pageService;
答案 2 :(得分:0)
有一个名为EasyMock的库。它提供了一个良好且易于集成的框架,用于在Web应用程序中编写单元测试。
您事先知道页面的id是什么(作为测试数据的一部分)并模拟模型中的其他数据。