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

Откуда: Тверь
Сообщений: 2735
Дан простейший контроллер-который вытягивает из репозитория все вопросы
@Autowired
    QuestionService questionService;

@PostMapping("/addanswer")
    public ModelAndView editAnswer( ){
        ModelAndView model=new ModelAndView();
        List<Question> q=questionService.findAll();
        model.addObject("answer",q);
        return model;
    }


вот тест
@ExtendWith(MockitoExtension.class)
public class addAnswerControllerTest {

    @Mock
    private QuestionService questionService;


    @InjectMocks
    private addAnswerController addAnswerController;

   private List<Question>listQ= Arrays.asList(new Question("test1"),new Question("test2"));


    @BeforeEach
     public void setUp(){
       when(questionService.findAll()).thenReturn(listQ);

    }
    @Test
   public void sss(){
        ModelAndView mv=addAnswerController.editAnswer();
       assertThat(mv.getModel()).extracting("answer").contains(listQ);
    }

}



казалось бы куда уже проще

берем сервис -делаем из него мок,инжектим в контроллер
переопределяем метод репозитория
все вроде по учебнику

но нет

вот эта строчка дает nullpointer

ModelAndView mv=addAnswerController.editAnswer();
3 окт 19, 09:56    [21985565]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2782
asv79,
Ты научился делать тред на одну тему? Так держать!
3 окт 19, 09:59    [21985568]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 43283
asv79, имя класса не по конвенции.

Должно быть с большой буквы. Иначе конвенции по именам бинов не соблюдаются.
К каким последствиям это приводит - мне лень рассуждать. Я не знаю. Но я-бы просто пофиксил
для начала.
3 окт 19, 10:06    [21985578]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
PetroNotC Sharp,эту тему сейчас все равно засрут,а по теме никто не ответит))
хочется очень чтобы тест заработал)
3 окт 19, 10:08    [21985580]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

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

когда срут - ты нажимаешь кнопку - сообщить модератору и тот - если согласен - чистит флуд и излишнюю фамильярность.
3 окт 19, 10:13    [21985585]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton
asv79, имя класса не по конвенции.

Должно быть с большой буквы. Иначе конвенции по именам бинов не соблюдаются.
К каким последствиям это приводит - мне лень рассуждать. Я не знаю. Но я-бы просто пофиксил
для начала.


java.lang.NullPointerException
	at com.alekseev.Javatesting.addAnswerControllerTest.sss(addAnswerControllerTest.java:40)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)


переделал-ошибка все таже все в той же сточке кода

ModelAndView mv=addAnswerController.editAnswer();
3 окт 19, 10:19    [21985591]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16870
asv79,

ты уже успел вчера вечером чела обидеть - не надо продолжать грубить
3 окт 19, 10:22    [21985595]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 43283
asv79, кидай ссылку на бранч.

Просто людям и мне лень собирать новый проект под такой пустяк.
3 окт 19, 10:39    [21985611]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton,
все пофиксил наконец то)

во первых не хватало анатоции

@RunWith(MockitoJUnitRunner.class)
без нее тест видимо не запускался

во вторых почему то неправильно инициализировался список
в третьих неправильно выбрал сущность

мокито берет обьект и все его поля по умолчанию делает null или 0

вообщем для спортивного интереса все переделал

и наконец то получил зеленый тест
3 окт 19, 10:44    [21985613]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2782
asv79
PetroNotC Sharp,эту тему сейчас все равно засрут,а по теме никто не ответит))
хочется очень чтобы тест заработал)
заведение темы это забота о Других, а не твои удобства.
Нет логики))
3 окт 19, 10:57    [21985623]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
Герой дня
Member

Откуда: obmanula.ru
Сообщений: 30539
для тестов предлагаю использовать Spock фреймворк, с ним все намного проще

https://habr.com/ru/post/137561/
3 окт 19, 15:06    [21985943]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 43283
Герой дня, Spock/Groovy/Gradle - это то что еще предстоит ему учить. Скорее всего одновременно.
3 окт 19, 15:29    [21985962]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
Герой дня
для тестов предлагаю использовать Spock фреймворк, с ним все намного проще

https://habr.com/ru/post/137561/

у нас конкертные требования к фреймворкам,мы не решаем тут ничего))
3 окт 19, 15:50    [21985990]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
ребят сейчас пишу интерграциионый тест

вопрос такой у меня база на проде psql
сооотвественно мне нужна emded база

я хочу взять
otj-pg-embedded

но я не могу найти пример как ее использовать

например что написать в application property
как ее использовать в тестах самих?

например в монго все просто

в тесте пишем вместо своего репозитория создаем экзмпляр класса mongotemplate, с которым я далее могу работать как со своим репозиторием

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


как настроить otj-pg-embedded я нигде не нашел

может для нее ничего надо ?
тогда как мне создать ембдед репозиторий ?
3 окт 19, 16:05    [21986004]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
https://github.com/opentable/otj-pg-embedded/blob/master/.no-otj-spring
судя по этой ссылке ,в которой пусто возможность интреграции со спринг отсутвует


а если я буду в качестве емдед базы использовать монго ?
3 окт 19, 16:13    [21986010]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 43283
asv79
а если я буду в качестве емдед базы использовать монго ?

Монго это нереляционна БД. Считается документо-ориентированной. И 99% функционала реляционок с ней просто
не будут работать.

Играя с современными мапперами типа SpringData можно добиться похожего функционала но это совсем другая
архитектурная натяжка и ее надо принимать на самом верхнем уровне команды. Тоесть ты сам не вправе решить
что Монго вдруг (!) внезапно будет заменой Postgresql.
3 окт 19, 16:23    [21986020]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 43283
asv79
ребят сейчас пишу интерграциионый тест

вопрос такой у меня база на проде psql
сооотвественно мне нужна emded база

я хочу взять
otj-pg-embedded

В качестве embed обычно используют H2, HSQL, Derby. Они написаны на чистой Java и поддерживают
разные диалекты SQL. Какие именно диалекты - я не понмю. Надо смотреть документацияю. По синтаксису
возможны отличия от стандартного Ansi-92. Считаются реляционками. Достаточно надежны и проверены временем.

otj-pg-embedded я не знаю. Обычно начинаю изучение с зависимостей. Что продукт использует - тем он и является.

Курим тут https://github.com/opentable/otj-pg-embedded/blob/master/pom.xml
3 окт 19, 16:34    [21986036]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton
В качестве embed обычно используют H2, HSQL, Derby. Они написаны на чистой Java и поддерживают
разные диалекты SQL. Какие именно диалекты - я не понмю. Надо смотреть документацияю. По синтаксису
возможны отличия от стандартного Ansi-92. Считаются реляционками. Достаточно надежны и проверены временем.

otj-pg-embedded я не знаю. Обычно начинаю изучение с зависимостей. Что продукт использует - тем он и является.
Курим тут https://github.com/opentable/otj-pg-embedded/blob/master/pom.xml


неее
это все не то

вот нашел кастомную библиотеку,вроде как не нужны бубны с ней

просто ставишь анотацию на тест нужную и все само собой должно замутиться)
3 окт 19, 17:36    [21986106]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 43283
Ну и барахтайся с ней сам.
3 окт 19, 18:09    [21986142]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26878
asv79,

у коллег спросить, как принято писать интеграционные тесты и что использовать, стесняешься что-ли?
3 окт 19, 18:42    [21986170]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

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

у коллег спросить, как принято писать интеграционные тесты и что использовать, стесняешься что-ли?

у нас команда еще не собрана вместе)не у кого спрашивать.Допуски оформляют.

да я вроде нагуглил ,этот эмбдед метод уже устарел
щас тестируют @JPADATATEST

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

не успел посмотреть это чудо ,но вроде логично что в 2019 году будет достаточно поставить анотации,а не лазить по гуглу ища какие то кастомные библиотеки ,пытаясь все это подружить
3 окт 19, 23:04    [21986320]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
чо то не получается нихера
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).
4 окт 19, 10:24    [21986480]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
@RunWith(SpringJUnit4ClassRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class addAnswerControllerTest {
    TestRestTemplate restTemplate=new TestRestTemplate();
    @Autowired
    private QuestionRepo questionRepo;


    @Before
    public void before(){
        Question question=new Question();
        question.setText("AAA");
        questionRepo.save(question);
    }
    
    @Test
    public void EditAnswer() {
       ResponseEntity<List<Question>> responseEntity= restTemplate.exchange("http://localhost:8080/fa", HttpMethod.GET, null, new ParameterizedTypeReference<List<Question>>() {
        });
       List<Question> list=responseEntity.getBody();
       assertThat(list.size(),is(1));

    }
}


вот сам тест

явно чего то не хватает -странно -ведь должно происходить следущее
должна создаваться рандомна база,туда сейвиться запись
4 окт 19, 10:25    [21986482]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
mayton
Member

Откуда: loopback
Сообщений: 43283
Jdbc-drivers версии от 4.0 требуют включения в список dependencies которые будут видны в скомпилированом коде.

Более жлобские до 4.0 требовали мануальной прогрузки драйвера через Class.forName(...) или DriverManager.register(...)
4 окт 19, 10:26    [21986485]     Ответить | Цитировать Сообщить модератору
 Re: Junit тестирование простейшего контроллера  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton
Jdbc-drivers версии от 4.0 требуют включения в список dependencies которые будут видны в скомпилированом коде.

Более жлобские до 4.0 требовали мануальной прогрузки драйвера через Class.forName(...) или DriverManager.register(...)


сейчас я нашел другой туториал
https://hellokoding.com/spring-boot-test-data-layer-example-with-datajpatest/

делаю один в один все как в нем
,хорошо у меня сервер был вырублен
так вот что я нашел в логе

Hibernate: alter table user_quest drop constraint FKm1qm44n06js0fj5m29ek4kayv
Hibernate: alter table user_quest drop constraint FKb5owhjxbj8u2r10eqtvusyong
Hibernate: alter table usr_answer drop constraint FK9rl12nos651kelu5r20dw9ney
Hibernate: alter table usr_answer drop constraint FKlmsuvddkn5nqdu1r1yoo6a3xy
Hibernate: drop table answer if exists
Hibernate: drop table question if exists
Hibernate: drop table user_quest if exists
Hibernate: drop table usr_answer if exists
Hibernate: drop table usr_test if exists
Hibernate: drop sequence hibernate_sequence if exists

Process finished with exit code -1


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