如何从JUnit测试方法调用自动服务

时间:2014-12-12 12:20:53

标签: java spring junit

我有一个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属性进行比较?

谢谢!

3 个答案:

答案 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是什么(作为测试数据的一部分)并模拟模型中的其他数据。