Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 29 30 31 32 33 34 35 36 37 [38]
 Re: Вопросы для тестов по java  [new]
asv79
Member

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

По сути ты передаешь ее в какой то Map-е, в каком то scope (page,request,session,application). Если ты корректно передашь и в "правильном" месте будешь искать, то найдешь.

У меня лежит в сесиии объект этот с ключем "test"

например в тимплейте я споконо ${test.id} -его беру
а вот в редиректе не хочет)ну не хочет значит просто прибавим его к стринг строке)
1 окт 19, 14:48    [21983928]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2539
Ну вот собственно и все)

Отсталось добавить юзеров и авторизацию по соц.сетям
юзер рум с историей проождения и можно выкладывать на боевые сервера

К сообщению приложен файл. Размер - 57Kb
1 окт 19, 16:16    [21984069]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2089
asv79
Ну вот собственно и все)
У Р А А А!

asv79
Отсталось добавить
блиииинннн)
1 окт 19, 19:17    [21984300]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2539
PetroNotC Sharp,да а чего там) у меня уже лежит готовая реализация прикручивания юзеров к чему угодно))

но пока я решил заняться тестами и хочу вот это свое приложение покрыть полностью тестами
1.юнит
2.интерграционные
3.E2E
2 окт 19, 11:57    [21984698]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2539
для начала я хочу написать простой юнит тест вот для этого простого контроллера,который просто добавляет в базу ответ к существующему ворпосу
package com.alekseev.Javatesting.Controller;


import com.alekseev.Javatesting.Entity.Answer;
import com.alekseev.Javatesting.Repository.AnswerRepo;
import com.alekseev.Javatesting.Repository.QuestionRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class addAnswerController {
    @Autowired
    QuestionRepo questionRepo;
    @Autowired
    AnswerRepo answerRepo;

    @GetMapping("/addanswer")
    public String editAnsw(){
        return "addAnswer";
    }

    @PostMapping("/addanswer")
    public String editAnswer(
            @RequestParam(name = "idQ")Long idQ,
            @RequestParam(name = "answ")String answ,
            @RequestParam(name ="b",required = false)String b
    ){
        Answer a=new Answer();
        a.setQuestion(questionRepo.findById(idQ).get());
        a.setAnswerText(answ);
        if(b==null){
            a.setMatch(false);}
        else {a.setMatch(true);}
        answerRepo.save(a);
        return "redirect:/addanswer";


    }
}
2 окт 19, 11:59    [21984702]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2539
Немного сократил этот контроллер

вот так лучше выглядит ,пусть спринг сам ищет в репозитории вопросы
@Controller
public class addAnswerController {
    @Autowired
    AnswerRepo answerRepo;

    @GetMapping("/addanswer")
    public String editAnsw(){
        return "addAnswer";
    }

    @PostMapping("/addanswer")
    public String editAnswer(
            @RequestParam(name = "idQ")Question q,
            @RequestParam(name = "answ")String answ,
            @RequestParam(name ="b",required = false)String b
    ){
        Answer a=new Answer();
        a.setQuestion(q);
        a.setAnswerText(answ);
        if(b==null){
            a.setMatch(false);}
        else {a.setMatch(true);}
        answerRepo.save(a);
        return "redirect:/addanswer";
    }
}
2 окт 19, 12:09    [21984714]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
vas0
Member

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

    @PostMapping("/addanswer")
    public String editAnswer(
            @RequestParam(name = "idQ")Question q,
            @RequestParam(name = "answ")String answ,
            @RequestParam(name ="b",required = false)String b
    ){
        Answer a=new Answer();
        a.setQuestion(q);
        a.setAnswerText(answ);

        // тут можно заменить 
        if(b==null){
            a.setMatch(false);}
        else {a.setMatch(true);}

        // на так
        a.setMatch(b != null);

        answerRepo.save(a);
        return "redirect:/addanswer";
    }
}
2 окт 19, 12:16    [21984726]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2539
vas0
@Controller
public class addAnswerController {

    @PostMapping("/addanswer")
    public String editAnswer(
            @RequestParam(name = "idQ")Question q,
            @RequestParam(name = "answ")String answ,
            @RequestParam(name ="b",required = false)String b
    ){
        Answer a=new Answer();
        a.setQuestion(q);
        a.setAnswerText(answ);

        // тут можно заменить 
        if(b==null){
            a.setMatch(false);}
        else {a.setMatch(true);}

        // на так
        a.setMatch(b != null);

        answerRepo.save(a);
        return "redirect:/addanswer";
    }
}

это да,спасибо)никак не могут от этих проклятых ифов уйти)))
2 окт 19, 12:40    [21984750]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2539
vas0,
правильно ли я делаю как думаешь?

я хочу принять в этот контроллер id
по нему найти вопрос и записать ответ в базу

первое что я должен сделать
это
@ExtendWith(MockitoExtension.class)
public class addAnswerControllerTest {

    @Mock
    QuestionRepo questionRepo;
    @Mock
    AnswerRepo answerRepo;

    @InjectMocks
    addAnswerController addAnswerController;

    @BeforeEach
     void setUp(){
    }


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


далее я так понимаю я должен создать руками в методе setUp этот вопрос вроде и хрен знает что там дальше))
2 окт 19, 15:16    [21985013]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
mayton
Member

Откуда: loopback
Сообщений: 42385
Метод аннотированный @BeforeEach вызывается перед каждым тестовым методом.
Его можно не использовать вообще. Его включают тогда когда в тестах есть рутина.
Подготовительные действия. Например - почистить таблички в БД.
2 окт 19, 16:39    [21985137]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2539
решил я начать с малого

взял нарисовал контроллер

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

написал к этому контроллеру тест

package com.alekseev.Javatesting;

import com.alekseev.Javatesting.Controller.addAnswerController;
import com.alekseev.Javatesting.Entity.Question;
import com.alekseev.Javatesting.Repository.QuestionRepo;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.web.servlet.ModelAndView;

import java.util.Arrays;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
public class addAnswerControllerTest {

    @Mock
    private QuestionRepo questionRepo;


    @InjectMocks
    addAnswerController addAnswerController;

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


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

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

}




и получаю nullpointer вот в этой строчке ModelAndView mv=addAnswerController.editAnswer();
похоже либо чо то с версиями напутано либо яхз
2 окт 19, 17:21    [21985218]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2539
ведь правльно ж все написано

беру делаю мок из репозитория инжекчу его в контроллер
переопределяю нужный мне метод мока

что за нулл поинтер не пойму
2 окт 19, 17:57    [21985256]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
mayton
Member

Откуда: loopback
Сообщений: 42385
Странно выглядит. Перепиши по другому.

@InjectMocks
    addAnswerController addAnswerController;
2 окт 19, 18:03    [21985260]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2539
mayton
Странно выглядит. Перепиши по другому.

@InjectMocks
    addAnswerController addAnswerController;

почему странно?
есть контроллер
есть репо
репо мок
инжекчу репу в контроллер

перепоределяю метод
я понимаю что где то тут засада
что контроллер не видит репу
надо разбираться почему
2 окт 19, 18:56    [21985323]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
MAPA3OT
Member

Откуда: Над трубами, во чреве коих Яуза живет.
Сообщений: 2615
asv79, есть у меня стойкое подозрение, что вся магия кроется в методе initMocks
Дока
3 окт 19, 13:54    [21985868]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы для тестов по java  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2539
MAPA3OT
asv79, есть у меня стойкое подозрение, что вся магия кроется в методе initMocks
Дока

все оказалось прозаичнее
просто нужно было добавить в тест класс стартер
@RunWith(MockitoJUnitRunner.class)

и все сразу заработало чудесным образом

@InjectMocks в данном случае делал именно то,что от него и требовалось создавал объект и инжектил туда все поля,отмеченые @Mock
3 окт 19, 14:52    [21985918]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 29 30 31 32 33 34 35 36 37 [38]
Все форумы / Java Ответить