2009-11-10 2 views
0

Привет, хорошие люди, я пришел по странному поведению в своем тесте. Я использую JPA hibernate annotation с spring. пусть говорят, у меня есть MyObject класса, и это свойство электронной почты marquedБаза данных не отбрасывается между модульным тестом

@Column(name="EMAIL", length=100, unique=true) 
private String email; 

я подготовиться к тому, что я должен быть в базе данных в настройках этого класса MyObjectDAOImplTest

@Autowired 
MyObject1 ob1; 
@Autowired 
MyObject1 ob2; 

@Before 
public void setUP(){ 
    dao = manager.createthedao(); 

    .... 
    ob1.setEmail("[email protected]"); 
    .... 

    .... 
    ob2.setEmail("[email protected]"); 
    .... 
    dao.save(ob1); 
    dao.save(ob2); 

} 

так моя по части из метода теста кулака все остальное являются failling.I о том, что дублирует значения в столбце электронной почты, но мой hbm2ddl.auto = create и я даже использовал создание-падение. но все равно. я просто не понимаю. Я использовал это во многих проектах без уникального курса, но я ожидаю, что база данных будет удаляться каждый раз при запуске тестового метода. Есть ли что-нибудь об уникальном, о котором я должен знать? спасибо за чтение. Дай мне свое предложение. Я что-то не заметил или не смог сделать?

ответ

1

Вам не хватает @After method, поэтому вы видите это поведение. При запуске тестов jUnit 4.x весь пакет запускается в одном потоке один за другим, что означает, что вам нужно очистить состояние самостоятельно или выполнить неуказанное поведение, обычно ресурсы продолжают зависать и вызывать побочные эффекты для других модульных тестов.

+0

mmmh не знал, что это случай. Наконец, я сделал это. Но на мой взгляд, это я работал, потому что я думал, что я не должен это делать –

1

Должен ли у вас какой-либо код для удаления или удаления базы данных единичного теста после (или предпочтительно до) каждого теста? Вы уверены, что фактически создаете базу данных? Какой движок базы данных вы используете?

Если вы используете базу данных на базе данных, инициализируйте ее в нужном месте (каждый раз, когда выполняется тест)?

Вы вызываете SessionFactory.close() где-нибудь? Если вы используете hibernate.hbm2ddl.auto=create-drop, это должно обрабатывать сброс базы данных.

+0

спасибо за ответ вот мой hsql.jdbc.properties jdbc.driverClassName = org.hsqldb.jdbcDriver jdbc.username = са jdbc.password = jdbc.url = JDBC: HSQLDB: файл MYDB, создать = true Я переключился на mysql из-за этой проблемы. При тестировании с помощью hbm2ddl.auto = create-drop, а затем я прокомментировал весь свой тестовый метод, но первый. И увидел, что db упал после того, как я обновил db браузер. –

+0

Пожалуйста, добавьте все соответствующие файлы конфигурации в свой вопрос. –

+0

кстати. возможно, вам стоит рассмотреть возможность использования в памяти режима тестирования. (jdbc.url = jdbc: hsqldb: mem: mydb; create = true) ... он должен быть быстрее. – varad

Смежные вопросы