Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Java |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 3 4 5 6 [7] 8 9 10 11 .. 21 вперед Ctrl→ |
вадя Member Откуда: Екатеринбург Сообщений: 18678 |
![]() |
||
7 окт 19, 22:57 [21988932] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
вообще то я ,как прогамист в седьмом колене вынужден тебе заявить,что без пива ты не прогамист,а так себе что и потдверждается тем фактом,ЧТо ты не можешь простейщий тест написать) |
||||
7 окт 19, 23:09 [21988938] Ответить | Цитировать Сообщить модератору |
вадя Member Откуда: Екатеринбург Сообщений: 18678 |
![]() |
||
7 окт 19, 23:20 [21988945] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 50489 |
Ээ да ты - горький пьяница. Не будем тебе сегодня помогать! ![]() Задлянафига? |
||||
7 окт 19, 23:30 [21988951] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
тест написал ,все работает кроме одного момента каждый раз при запуске теста мне необходимо каким то образом либо полностью удалить все содержимое базы,либо hibernate_sequence ,чтобы я мог значть текущее id как это сделать в гугле не нашел,точнее нашел ,но ни один из методов не работает @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) public class addAnswerControllerTest { @Autowired private QuestionRepo questionRepo; @Autowired private AnswerRepo answerRepo; @Autowired TestRestTemplate restTemplate; @Autowired EntityManager manager; @Before public void setUp() throws Exception { [color=yellow]manager.createQuery("ALTER SEQUENCE hibernate_sequence RESTART WITH 1").executeUpdate();[/color] Question q1 = new Question(); q1.setText("aaa"); Question q2 = new Question(); q2.setText("bbb"); Question q3 = new Question(); q3.setText("ссс"); questionRepo.save(q1); questionRepo.save(q2); questionRepo.save(q3); } @After public void tearDown() throws Exception { answerRepo.deleteAll(); questionRepo.deleteAll(); } @Test public void editAnswer() { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap<String,String>map=new LinkedMultiValueMap<String, String>(); map.add("idQ","1"); map.add("answ","test text"); map.add("b","true"); HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers); ResponseEntity<String> response = restTemplate.postForEntity( "http://localhost:8080/addanswer", request , String.class ); assertThat(questionRepo.findAll().size(),is(3)); assertThat(questionRepo.findById(2L).get().getText(),is("bbb")); assertThat(questionRepo.findById(1L).get().getAnswerList().size(),is(1)); assertTrue(questionRepo.findById(1L).get().getAnswerList().get(0).getAnswerText().equalsIgnoreCase("test text")); } } |
8 окт 19, 11:27 [21989209] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7245 |
|
||
8 окт 19, 11:31 [21989211] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 50489 |
asv79, смена сиквенса является плохой и очень опасной операцией. После нее обычно база не работоспособна. Кроме того команды типа "alter" являются DDL командами. Тоесть блокирующими транзакции. И их невозможно выполнять в сессиях параллельно с работающими. Грубо говоря они - эксклюзивные на уровне с CREATE/DROP table. В твоих интересах не менять сиквенс а полностью убивать и пересоздавать схему. Это надёжнее. Еще одна идеологическая ошибка которую ты допускаешь. Тесты нужно писать в привязке к данным а не к ID-шникам. ID-шники это сугубо техническая информация а не бизнесовая. И в некоторыех системах даже нет гарантии их последовательности. Например в мессенждинге ID-шки это 128 битные рандомные числа. P.S. Протрезвел уже? ![]() |
8 окт 19, 11:32 [21989216] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
а что именно показать? очевидно же что если я делаю в базе 4 записи а потом их удаляю,а потом делаю это снова,то id последних записей уже будут не 1 2 3 4 а другие -какие одному богу изветсно поэтому чтобы вот эта часть теста работала assertThat(questionRepo.findById(2L).get().getText(),is("bbb")); assertThat(questionRepo.findById(1L).get().getAnswerList().size(),is(1)); assertTrue(questionRepo.findById(1L).get().getAnswerList().get(0).getAnswerText().equalsIgnoreCase("test text")); мне нужно чтобы id генератор всегда при старте теста начинался с 1 достичь это можно каким то образом ресетнув генератор либо же как пишет майтон убить схему либо же использовать @Transactional ,но у меня не вышло почему то тоже тоесть тест после @Before должен будет откатить все изменения-как бы это самый лучший и незатратный вариант и наверняка так и делают в реальной жизни,но чего то не выходит) |
||||
8 окт 19, 11:46 [21989233] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
я с тобой согласен ,что тесты пишут в привязке к данным,но у меня тестируемый контоллер принимает на вход id и как не крути я должен это оттестить пишут что нужно проводить тест в пределах одной транзакции -хрен его знает чото не пойму почему у меня не получается пс.протрезвел конечно))чо там 5 бутылок пива ,причем 4 из них настоящее пиво а не бодяга из ашана) |
||
8 окт 19, 11:49 [21989237] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 50489 |
asv79, ну вот давай логически рассуждать. Откуда ты этот ID изначально знаешь? |
8 окт 19, 11:57 [21989248] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7245 |
|
||
8 окт 19, 11:58 [21989251] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
очевидно)но как как мне дропнуть и заново это создать в джава коде там какие то игрища с @Transactional которые нихрена не работают |
||||
8 окт 19, 12:01 [21989254] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7245 |
Если нашел - показывай. Если не показал, значит не искал. |
||
8 окт 19, 12:05 [21989259] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
@Autowired EntityManager manager; @Before public void setUp() throws Exception { manager.createQuery("drop database integrationtest").executeUpdate(); делаю вот так ничего не выходит пишет ошибку java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: drop near line 1, column 1 [drop database integrationtest] |
8 окт 19, 12:30 [21989300] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
как это сделать в джава коде? |
||||
8 окт 19, 12:37 [21989318] Ответить | Цитировать Сообщить модератору |
vas0 Member Откуда: Таможенный союз (Россия, Казахстан) Сообщений: 1288 |
asv79, у хибернета есть свойство hibernate.hbm2ddl.auto управляющее созданием схемы. Там одно из значений create-drop (пересоздание схемы при каждом запуске), как раз может подойти для тестов. |
8 окт 19, 12:40 [21989322] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 50489 |
Уже обсудили. |
8 окт 19, 12:40 [21989325] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
не получится,у меня DDL генерирует как раз сам хибер мне просто нужно сбросить генератор я так понял это не просто,ибо кучу тем пеерчитал на стаковерфлоу и не нашел рабочих вариантов |
||
8 окт 19, 12:45 [21989331] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7245 |
Запусти простой select запрос на post. Работает? |
||
8 окт 19, 12:52 [21989339] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7245 |
Или ты еще не дошел до sql запросов к бд? |
8 окт 19, 12:53 [21989343] Ответить | Цитировать Сообщить модератору |
vas0 Member Откуда: Таможенный союз (Россия, Казахстан) Сообщений: 1288 |
Программирование все больше сводится с задаче скопипастить со stackoverflow и если ничего не нашел, то задача переходит в разряд "нерешаемых". |
||||
8 окт 19, 12:53 [21989344] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7245 |
|
||
8 окт 19, 13:09 [21989367] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
да где это заменить то? я не вижу этой настройки нигде |
||||
8 окт 19, 14:27 [21989452] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 50489 |
Это просто. DROP sequence ....; CREATE sequence ....; |
||||
8 окт 19, 14:29 [21989455] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
просто ,только не работает и на стак овефлоу никто не знает как это делать |
||||
8 окт 19, 14:41 [21989476] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 3 4 5 6 [7] 8 9 10 11 .. 21 вперед Ctrl→ |
Все форумы / Java | ![]() |