2013-02-03 43 views
0

我想知道在spring mvc + hibernate应用程序中添加fixtures用于开发目的的最佳方法是什么。基本上这个想法是当应用程序在“开发”环境中加载时,一定数量的灯具应该预填充数据库。需要注意的一点是,我不想使用DbUnit或加载硬编码的SQL,而是想使用实体管理器在应用程序内部生成固件,以便在需要时可以使用某些服务来生成信息(让说我想创建一些用户fixtues,id喜欢能够使用salt服务等来生成密码等)。理想情况下,我希望能够为每个域类型分开不同类别的灯具。到目前为止,我还没有找到有用的东西呢?我很感激任何帮助,请记住我是一个完整的Spring新手,来自PHP背景,所以请保留一些更详细的内容,告诉我应该去哪里:S。谢谢!Spring MVC(Spring roo)Hibernate fixture

回答

1

这是为了发展吗?不只是单元或集成测试?如果是这样的话,我想我只是用一个main创建一个Java类,并把你的数据创建代码放在那里。您也可以使该类自动连接数据填充bean。然后让所有数据填充器实现相同的界面。确保你的主要方法注释如下:

@ContextConfiguration("classpath:/META-INF/spring/applicationContext.xml") 

这将基本上为您的静态主要方法加载弹簧配置。

然后,您可以让构建在擦除数据库后每次运行它,或者在需要填充数据时手动调用它。

如果这只是单元测试,那么我会在测试源路径中创建一个数据填充器,然后从您的测试#setUp方法中调用它。

考虑以下几点:

public interface Populator { 
    void run(); 
} 

@Repository 
public class UserPopulator { 
    @PersistenceContext 
    private EntityManager em; 

    @Transactional 
    public void run() { 
     create some users 
     em.persist(users); 
    } 
} 


@Repository 
public class ThingPopulator { 
    @PersistenceContext 
    private EntityManager em; 

    @Transactional 
    public void run() { 
     create some thing 
     em.persist(thing); 
    } 
} 

@Configurable 
@ContextConfiguration("classpath:/META-INF/spring/applicationContext.xml") 
public class DataPopulator { 
    @Autowired 
    private List<Populator> populators; 

    public void run() { 
     for (Populator populator : populators) { 
     populator.run(); 
     } 
    } 

    public static void main(String[] args) { 
     new DataPopulator().run(); 
    } 
} 

然后你就可以运行这个类商发展。如果你有一个单元测试只为用户,你也可以这样做:

public class UserTest { 
    @Before 
    public void setUp() { 
     new UserPopulator().run(); 
    } 

    // tests 
} 

或类似的东西。

+0

因此,基本上有2个不同的相同接口的集合,这个注释和类为主应用程序和测试路径中的不同灯具实现它?有没有什么办法可以分享它,所以我不必保持它的一个测试版本和一个应用程序本身的版本。另外在你的oppiion什么是利用Hibernate/Spring中的灯具最好的方法,因为我看到的主要是基于加载静态.sql文件,我认为这是非常不灵活的...... – Feras

+0

嗯,我有我的应用程序数据作为实体,所以我不不需要.sql文件。我只有代码创建和持久化实体的填充。而你只需要一套。标记为@Repostiory,你可以在测试或静态主文件中使用它们。 –

+0

@Feras我编辑了我的答案,给你更具体的方向。我希望这是你正在寻找的。 –