powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Mockito.spy()
4 сообщений из 4, страница 1 из 1
Mockito.spy()
    #39873479
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

test1 проходит, т.е. происходит подмена настоящего Иванова на поддельного.
test2 выводит Иван Иванов has notified, т.е. подмена не происходит.

Как добиться подмены со вложенными компонентами?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public class UserDAOWithMockTest {

    private static final Map<Long, User> users = new HashMap<>();
    private static final UserDAO userDAO = Mockito.spy(UserDAO.class);
    private static final MyService myService = new MyService();

    static {
        users.put(1L, new User("Поддельный Иванов"));
    }
    
    @BeforeClass
    public static void setUpClass() {
        when(userDAO.getById(any(Long.class))).thenAnswer(
                (InvocationOnMock invocation)
                -> users.get((Long) invocation.getArgument(0)));
    }
    
    @Test
    public void test1() {
        assertEquals("Поддельный Иванов", userDAO.getById(1L).getName());
    }

    @Test
    public void test2() {
        myService.notifyUser(1L);
    }

}

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class User {

    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class UserDAO {

    private static final Map<Long, User> users = new HashMap<>();
    
    static {
        users.put(1L, new User("Иван Иванов"));
    }
    
    public User getById(Long id) {
        return users.get(id);
    }
    
}

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class MyService {
    
    private final UserDAO userDAO;

    public MyService() {
        this.userDAO = new UserDAO();
    }
    
    public void notifyUser(Long userId) {
        User user = userDAO.getById(userId);
        System.out.println(user.getName() + " has notified");
    }

}
...
Рейтинг: 0 / 0
Mockito.spy()
    #39873491
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
@RunWith(SpringRunner.class)
@SpringBootTest
public class ControllerMockTest {

    @Mock
    private QuestionRepo questionRepo;
    @InjectMocks
    ControllerForTest controller;


    @Before
    public void setUp(){
        List<Question>list=new ArrayList<>();
        Question q1 = new Question();
        q1.setText("aaa");
        Question q2 = new Question();
        q2.setText("bbb");
        Question q3 = new Question();
        q3.setText("ссс");
        list.add(q1);
        list.add(q2);
        list.add(q3);
        when(questionRepo.findAll()).thenReturn(list);
    }
    @Test
    public void sss() {

        assertThat(controller.sss().size(), is(3));

    }
}


вот тока что писал как раз ,посмотри может поможет чем то
...
Рейтинг: 0 / 0
Mockito.spy()
    #39873497
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MolasarВсем привет!

test1 проходит, т.е. происходит подмена настоящего Иванова на поддельного.
test2 выводит Иван Иванов has notified, т.е. подмена не происходит.

Как добиться подмены со вложенными компонентами?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class UserDAOWithMockTest {

    private static final UserDAO userDAO = Mockito.spy(UserDAO.class);
    private static final MyService myService = new MyService(userDAO); // ну так нужно его у сервиса подменить

}

public class MyService {
    
    private final UserDAO userDAO;

    public MyService() {
        this(new UserDAO());
    }

    public MyService(UserDAO userDAO) { // и тут конструктор
        this.userDAO = userDAO;
    }
}
...
Рейтинг: 0 / 0
Mockito.spy()
    #39873508
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вносить изменения в класс MyService нельзя.

vas0MolasarВсем привет!

test1 проходит, т.е. происходит подмена настоящего Иванова на поддельного.
test2 выводит Иван Иванов has notified, т.е. подмена не происходит.

Как добиться подмены со вложенными компонентами?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class UserDAOWithMockTest {

    private static final UserDAO userDAO = Mockito.spy(UserDAO.class);
    private static final MyService myService = new MyService(userDAO); // ну так нужно его у сервиса подменить

}

public class MyService {
    
    private final UserDAO userDAO;

    public MyService() {
        this(new UserDAO());
    }

    public MyService(UserDAO userDAO) { // и тут конструктор
        this.userDAO = userDAO;
    }
}
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Mockito.spy()
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]