0

永続性クラスの junit テストを適切に設定しようとしていますが、「緑色のバー」が表示されていても、いくつか心配です。デバッガーでテスト ファイルを実行すると、testList() で、すべてのオブジェクトが期待どおりに読み込まれ、いずれかのオブジェクトに子がある場合はそれらも読み込まれることがわかります。

For testList(), after I do...
instance.update(sg);
List <SettingsGroup> sl = instance.list();

... デバッガー (最後のスクリーンショット) で、子が読み込まれていないことがわかります。

要素を更新し、それを取得して更新が行われたことを確認する適切な方法は何ですか? 今、私は次のようなことをしています

instance.update(sg);
List <SettingsGroup> sl = instance.list();

...しかし、私はそれについて確信が持てません。

私がtestDelete()しようとすると、要素のリストのサイズが削除前と同じになり、不思議です。

休止状態のテストを調査しようとすると、多くの単純な例に出くわしましたが、適切なセットアップ、破棄、およびセッション/トランザクション管理を行う方法がまだわかりません。

このクラスに対応するテーブルには 5 つの「ハードコードされた」行があるため、「読み取り」呼び出しについてはかなり確信があります。

テストクラス

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( locations = {"applicationContext.xml"})
@Transactional
public class SettingGroupDaoTest extends AbstractJUnit4SpringContextTests {

    public SettingGroupDaoTest(){}
    SettingGroupDao instance;

    @BeforeClass
    public static void setUpClass() throws Exception {}

    @AfterClass
    public static void tearDownClass() throws Exception {}

    @Before
    public void setUp()   {
        Configuration c  = HibernateConfiguration.getHibernateConfiguration()
                .configuration(SettingsGroup.class);

        SessionFactory sessionFactory = c.buildSessionFactory();
        instance = new SettingGroupDao();
        instance.setSessionFactory( sessionFactory );
    }

    @Test
    public void testList() throws Exception {
        SettingsGroup sq = instance.get(1);
        SettingsGroup s1 = sq.getChildren().get(0);
        System.out.println( "children index 2 name: " + s1.getName() );
        System.out.println( "2nd element of children: " + sq.getChildren().get(1).getName() );
    }

    @Test
    public void testUpdate() throws Exception{
        SettingsGroup sg = instance.get(1);
        sg.setName("Updated Name of Setting Group");
        instance.update(sg);
        List <SettingsGroup> sl = instance.list();
        Hibernate.initialize( instance.list() );
        System.out.println( "UPDATED Settings Group Name: " + sg.getName() );
    }

    @Test
    public void testDelete() throws Exception{
        instance.delete( 0 );
        int s = instance.list().size();
        System.out.println( "Size after delete: " + s );
    }
}

上記のテスト用の構成:

public class HibernateConfiguration {
    private HibernateConfiguration(){}
    public Configuration configuration( java.lang.Class clazz ) {
        Configuration c = new Configuration();
        c.setProperty(Environment.DRIVER, "org.postgresql.Driver");
        c.setProperty(Environment.URL, "jdbc:postgresql://localhost/###");
        c.setProperty(Environment.USER, "postgres");
        c.setProperty(Environment.PASS, "####");
        c.setProperty(Environment.DIALECT, "org.hibernate.dialect.PostgreSQLDialect");
        c.setProperty(Environment.AUTOCOMMIT, "true"); //"true");
        c.addClass( clazz );
        return c;
    }
    public static HibernateConfiguration getHibernateConfiguration(){
        return new HibernateConfiguration();
    }
}

ドメイン クラス:

@Entity
@SequenceGenerator(name = "settings_group_id_seq", sequenceName = "settings_group_id_seq")
@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name="settings_group")
public class SettingsGroup implements Serializable, DomainObject {

    private int id;
    private String name;
    private String code;

    private List<SettingsGroup> children = new LinkedList<SettingsGroup>();

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "settings_group_id_seq")
    @Column(name = "id", insertable = false)
    public int getId() {return id;}

    public void setId(int id) {this.id = id;}

    @Column(name = "name")
    public String getName() {return name;}

    public void setName(String name) {this.name = name;}

    @Column( name = "code")
    public String getCode() {return code; }

    public void setCode(String code) {this.code = code;}


    @OneToMany( fetch = FetchType.EAGER)
    @JoinColumn( name = "parent_id")
    @OrderColumn
    public List<SettingsGroup> getChildren() {return children;}

    public void setChildren(List<SettingsGroup> children) {this.children = children;}
}

ここに画像の説明を入力

4

1 に答える 1

0

いくつかの考え...あなたがしていることは、データベースが必要なため、実際には統合テストです。次に、肯定的ではありませんが、更新された行を正常にクエリする前に、更新をコミットする必要はありませんか?

于 2013-02-01T20:24:42.547 に答える