Нужен ли мне метод сноса при издевательстве в Мокито?

1

У меня простой unit тест, где я тестирую DAO. Я высмеиваю зависимость и вставляю ее в объект через конструктор. Мне нужно срыв? Выключает ли Mockito выход в том же состоянии, в котором он ввел метод настройки? Пожалуйста, объясните также.

@Mock
private PersonDAO dao;

@Overide
public void setup(){
    MockitoAnnotations.initMocks(this);
    sut = new PersonResource(dao);
}

@Test
public void testUpdate(){
    when(dao.findNameById(1)).thenReturn("Abhinav-before");
    sut.update(1, "Abhinav-after");
}
  • 1
    Не могли бы вы показать код? Это сильно упростит ситуацию
  • 0
    <! - language: lang-java -> `@Mock private PersonDAO dao; @Overide public void setup () {MockitoAnnotations.initMocks (this); sut = new PersonResource (dao); } @Test public void testUpdate () {when (dao.findNameById (1)). ThenReturn ("Abhinav-before"); sut.update (1, «Абхинав-после»); } «Нужно ли мне снести Дао издеваться?
Показать ещё 1 комментарий
Теги:
unit-testing
mockito

1 ответ

2

Если вы не используете другие ресурсы, управляемые штатами, такие как кеш или временный файл, вам не нужно срывать любые ресурсы, когда насмехается.

Макет - это всего лишь объект; он не имеет или не поддерживает ничего для внешних служб. Он получит сбор мусора, как и любой другой объект, который у вас есть в вашем тесте. Во всяком случае, в зависимости от того, как вы вводите макет, он воссоздан для каждого тестового прогона.

Теперь, когда вы предоставили немного кода, если бы вы использовали аннотацию @Before, вы были бы уверены, что оба макета вводятся перед каждым экземпляром тестового прогона. Как бы то ни было, этот тест, вероятно, не компилируется; Я не могу представить сценарий, в котором у вас будет этот тест, продлить еще один тест, который имеет метод setup.

(И если вы это сделаете, пожалуйста, не делайте. Вы только повредите себе.)

Наконец, утверждают что-то в этом тесте. Вы ничего не утверждаете, поэтому он всегда будет проходить, если вы не утвердите что-то истинное относительно состояния вашего тестового объекта.

Если вы используете этот бит, если вы используете MockitoJUnitRunner вместо этого, вам не нужна часть initMocks, но это применимо только в том случае, если это ваш единственный бегун, поскольку JUnit не может поддерживать несколько бегунов.

@RunWith(MockitoJUnitRunner.class)
public class PersonResourceTest {
    @Mock
    private PersonDAO dao;

    @InjectMocks
    private PersonResource testObject;

    @Test
    public void testUpdate(){
        when(dao.findNameById(1)).thenReturn("Abhinav-before");
        testObject.update(1, "Abhinav-after");
    }
}
  • 0
    Когда вы говорите: «Он создается заново для каждого теста, уничтожается ли макет при последнем тесте в наборе тестов?
  • 0
    Макет - вместе с любыми другими объектами, которые вы создали, - уничтожается по завершении каждого отдельного теста. Затем они воссоздаются в начале следующего теста. Это то, что я наблюдал, по крайней мере, из своего опыта и взаимодействия с ним.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню