У меня простой 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");
}
Если вы не используете другие ресурсы, управляемые штатами, такие как кеш или временный файл, вам не нужно срывать любые ресурсы, когда насмехается.
Макет - это всего лишь объект; он не имеет или не поддерживает ничего для внешних служб. Он получит сбор мусора, как и любой другой объект, который у вас есть в вашем тесте. Во всяком случае, в зависимости от того, как вы вводите макет, он воссоздан для каждого тестового прогона.
Теперь, когда вы предоставили немного кода, если бы вы использовали аннотацию @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");
}
}