База данных не вставлена ​​между тестами - PullRequest
0 голосов
/ 10 ноября 2009

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

@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("some@email.com");
  ....

  ....
  ob2.setEmail("someother@email.com");
  ....
  dao.save(ob1);
  dao.save(ob2);

}

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

Ответы [ 2 ]

1 голос
/ 10 ноября 2009

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

1 голос
/ 10 ноября 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...