Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7] 8 9 10 11 .. 19   вперед  Ctrl
 Re: Junit тестирование простейшего контроллера  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16729
asv79
я и так спокоен,так как во мне уже 4 портера и 1 охота
так вот отчего у тебя понос образовался
7 окт 19, 22:57    [21988932]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2543
вадя
asv79
я и так спокоен,так как во мне уже 4 портера и 1 охота
так вот отчего у тебя понос образовался

вообще то я ,как прогамист в седьмом колене вынужден тебе заявить,что без пива ты не прогамист,а так себе
что и потдверждается тем фактом,ЧТо ты не можешь простейщий тест написать)
7 окт 19, 23:09    [21988938]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16729
asv79
что и потдверждается тем фактом,ЧТо ты не можешь простейщий тест написать)
зато я могу в машинных кодах контроллеры программировать )
7 окт 19, 23:20    [21988945]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 42452
asv79
вадя
пропущено...
так вот отчего у тебя понос образовался

вообще то я ,как прогамист в седьмом колене вынужден тебе заявить,что без пива ты не прогамист,а так себе
что и потдверждается тем фактом,ЧТо ты не можешь простейщий тест написать)

Ээ да ты - горький пьяница.

Не будем тебе сегодня помогать!

Задлянафига?
7 окт 19, 23:30    [21988951]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2543
тест написал ,все работает кроме одного момента
каждый раз при запуске теста мне необходимо каким то образом либо полностью удалить все содержимое базы,либо 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]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
asv79
но ни один из методов не работает
покажи
8 окт 19, 11:31    [21989211]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 42452
asv79, смена сиквенса является плохой и очень опасной операцией. После нее обычно база не работоспособна.
Кроме того команды типа "alter" являются DDL командами. Тоесть блокирующими транзакции. И их невозможно
выполнять в сессиях параллельно с работающими. Грубо говоря они - эксклюзивные на уровне с CREATE/DROP table.

В твоих интересах не менять сиквенс а полностью убивать и пересоздавать схему. Это надёжнее.

Еще одна идеологическая ошибка которую ты допускаешь. Тесты нужно писать в привязке к данным а не к ID-шникам.
ID-шники это сугубо техническая информация а не бизнесовая. И в некоторыех системах даже нет гарантии их последовательности.
Например в мессенждинге ID-шки это 128 битные рандомные числа.

P.S. Протрезвел уже?
8 окт 19, 11:32    [21989216]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2543
PetroNotC Sharp
asv79
но ни один из методов не работает
покажи

а что именно показать?
очевидно же что если я делаю в базе 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]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2543
mayton
asv79, смена сиквенса является плохой и очень опасной операцией. После нее обычно база не работоспособна.
Кроме того команды типа "alter" являются DDL командами. Тоесть блокирующими транзакции. И их невозможно
выполнять в сессиях параллельно с работающими. Грубо говоря они - эксклюзивные на уровне с CREATE/DROP table.

В твоих интересах не менять сиквенс а полностью убивать и пересоздавать схему. Это надёжнее.

Еще одна идеологическая ошибка которую ты допускаешь. Тесты нужно писать в привязке к данным а не к ID-шникам.
ID-шники это сугубо техническая информация а не бизнесовая. И в некоторыех системах даже нет гарантии их последовательности.
Например в мессенждинге ID-шки это 128 битные рандомные числа.

P.S. Протрезвел уже?

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

пишут что нужно проводить тест в пределах одной транзакции -хрен его знает чото не пойму почему у меня не получается

пс.протрезвел конечно))чо там 5 бутылок пива ,причем 4 из них настоящее пиво а не бодяга из ашана)
8 окт 19, 11:49    [21989237]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 42452
asv79, ну вот давай логически рассуждать. Откуда ты этот ID изначально знаешь?
8 окт 19, 11:57    [21989248]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
asv79
то id последних записей уже будут не 1 2 3
ну дак либо сиквенс либо базу пересоздай. Не очевидно?
8 окт 19, 11:58    [21989251]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2543
PetroNotC Sharp
asv79
то id последних записей уже будут не 1 2 3
ну дак либо сиквенс либо базу пересоздай. Не очевидно?


очевидно)но как
как мне дропнуть и заново это создать в джава коде
там какие то игрища с @Transactional которые нихрена не работают
8 окт 19, 12:01    [21989254]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
asv79
как это сделать в гугле не нашел,точнее нашел ,но ни один из методов не работает
значит вот эта фраза - фейк.
Если нашел - показывай.
Если не показал, значит не искал.
8 окт 19, 12:05    [21989259]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2543
@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]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2543
PetroNotC Sharp
asv79
то id последних записей уже будут не 1 2 3
ну дак либо сиквенс либо базу пересоздай. Не очевидно?

как это сделать в джава коде?
8 окт 19, 12:37    [21989318]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
vas0
Member

Откуда: Таможенный союз (Россия, Казахстан)
Сообщений: 1279
asv79,

у хибернета есть свойство hibernate.hbm2ddl.auto управляющее созданием схемы. Там одно из значений create-drop (пересоздание схемы при каждом запуске), как раз может подойти для тестов.
8 окт 19, 12:40    [21989322]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 42452
Уже обсудили.
8 окт 19, 12:40    [21989325]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2543
vas0
asv79,

у хибернета есть свойство hibernate.hbm2ddl.auto управляющее созданием схемы. Там одно из значений create-drop (пересоздание схемы при каждом запуске), как раз может подойти для тестов.

не получится,у меня DDL генерирует как раз сам хибер
мне просто нужно сбросить генератор
я так понял это не просто,ибо кучу тем пеерчитал на стаковерфлоу и не нашел рабочих вариантов
8 окт 19, 12:45    [21989331]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
asv79
не получится,у меня DDL генерирует как раз сам хибер
он генерит если схемы нету.
Запусти простой select запрос на post.
Работает?
8 окт 19, 12:52    [21989339]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
Или ты еще не дошел до sql запросов к бд?
8 окт 19, 12:53    [21989343]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
vas0
Member

Откуда: Таможенный союз (Россия, Казахстан)
Сообщений: 1279
asv79
vas0
asv79,

у хибернета есть свойство hibernate.hbm2ddl.auto управляющее созданием схемы. Там одно из значений create-drop (пересоздание схемы при каждом запуске), как раз может подойти для тестов.

не получится,у меня DDL генерирует как раз сам хибер
мне просто нужно сбросить генератор
я так понял это не просто,ибо кучу тем пеерчитал на стаковерфлоу и не нашел рабочих вариантов
Ну и что там такого страшного заменить hibernate.hbm2ddl.auto=none на hibernate.hbm2ddl.auto=create-drop?

Программирование все больше сводится с задаче скопипастить со stackoverflow и если ничего не нашел, то задача переходит в разряд "нерешаемых".
8 окт 19, 12:53    [21989344]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
vas0
Программирование все больше сводится с задаче скопипастить со stackoverflow и если ничего не нашел, то задача переходит в разряд "нерешаемых".
декларативность, ё маё)
8 окт 19, 13:09    [21989367]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2543
vas0
asv79
пропущено...

не получится,у меня DDL генерирует как раз сам хибер
мне просто нужно сбросить генератор
я так понял это не просто,ибо кучу тем пеерчитал на стаковерфлоу и не нашел рабочих вариантов
Ну и что там такого страшного заменить hibernate.hbm2ddl.auto=none на hibernate.hbm2ddl.auto=create-drop?

Программирование все больше сводится с задаче скопипастить со stackoverflow и если ничего не нашел, то задача переходит в разряд "нерешаемых".

да где это заменить то?
я не вижу этой настройки нигде
8 окт 19, 14:27    [21989452]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 42452
asv79
vas0
asv79,

у хибернета есть свойство hibernate.hbm2ddl.auto управляющее созданием схемы. Там одно из значений create-drop (пересоздание схемы при каждом запуске), как раз может подойти для тестов.

не получится,у меня DDL генерирует как раз сам хибер
мне просто нужно сбросить генератор
я так понял это не просто,ибо кучу тем пеерчитал на стаковерфлоу и не нашел рабочих вариантов

Это просто.

DROP sequence ....;
CREATE sequence ....;
8 окт 19, 14:29    [21989455]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2543
mayton
asv79
пропущено...

не получится,у меня DDL генерирует как раз сам хибер
мне просто нужно сбросить генератор
я так понял это не просто,ибо кучу тем пеерчитал на стаковерфлоу и не нашел рабочих вариантов

Это просто.

DROP sequence ....;
CREATE sequence ....;

просто ,только не работает и на стак овефлоу никто не знает как это делать
8 окт 19, 14:41    [21989476]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7] 8 9 10 11 .. 19   вперед  Ctrl
Все форумы / Java Ответить