Вопрос

Мне нужно MOCK Entity-Manager, чтобы провести тестирование сервисного слоя (в моем случае фасад сеанса), чтобы быть независимым от базового слоя (который в моем случае является менеджером объекта).

Так как я могу сделать это? Должен ли я использовать DBUNIT? Мне нужно Easy / J (издевательство)?

Это было полезно?

Решение

Я предлагаю использовать Mockito Framework, это очень легко использовать и понимать.

@Mock
private EntityManager entityManager; 

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

Mockito.when(METHOD_EXPECTED_TO_BE_CALLED).thenReturn(AnyObjectoftheReturnType);

Когда вы запустите тест, любой вызов предыдущий объявлен в Mockito. Когда для EntityManager вернет стоимость, поставленную в Декларацию ..

Читайте полную документацию здесь.

https://static.javadoc.io/org.mockito/mockito-core/2.12.0/org/mockito/mockito.html#stubbing.

Другие советы

Для насмехаясь, я бы предложил Powermock.. Отказ Благодаря автоматически сгенерированным прокси, это может сделать практически все, что вы можете себе представить, начиная с создания издевателей от интерфейсов, через перехватывание инициализации отделкой с подавлением статической инициализации (единственное, что бьет меня, беспокоилась с издевательствами java.lang.Object).

Давайте скажем SessionFacadeTest Ваш номер Test Test для Junit для SeesionFacade.

import static org.powermock.api.easymock.PowerMock.createMock;
import static org.powermock.api.easymock.PowerMock.replayAll;
import static org.powermock.api.easymock.PowerMock.verifyAll;
import static org.easymock.EasyMock.anyObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import javax.persistence.EntityManager;

@RunWith(PowerMockRunner.class)
@PrepareForTest({SessionFacade.class})
public class SessionFacadeTest {
    @Test public void persistingObject() {
        //set up stage
        SessionFacade fixture = new SessionFacade();
        EntityManager managerMock = createMock(EntityManager.class);
        fixture.setManager(managerMock);
        //record expected behavior
        managerMock.persist(anyObject());
        //testing stage
        replayAll();
        fixture.anyMethodThatCallPersist();
        //asserting stage
        verifyAll();
    }
}

(Примечание. Я написал это здесь, так что может даже не скомпилировать, но даст вам идею).

Я обычно использую Easmock для издевательства в реализации бетонных услуг в тестовых случаях. Проверьте их гид пользователя. Отказ Он включает в себя AA очень простым в следующем пошаговом направлении, что объясняет основные концепции для насмешек издевательства в целом и выросли вас и работают с Easmock Fast.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top