Генерируйте Схему E-R путем инженерного анализа [закрытой] базы данных

Это работает как задумано. Однако вы можете настроить макеты вручную и вставить их в конструктор ConnectionManagementControllerImplTest (перед вызовом setTestClass(...)):

public ConnectionManagementControllerImplTest() {
    super();

    connectionManagementBusinessServiceMocked = Mockito.mock(ConnectionManagementBusinessService.class);

    connectionManagementControllerMocked = new ConnectionManagementControllerImpl();
    connectionManagementControllerMocked.setConnectionManagementBusinessService(connectionManagementBusinessServiceMocked);

    setTestClass(ConnectionManagementControllerImpl.class, connectionManagementControllerMocked);
}

Не забудьте удалить аннотации @Mock и @InjectMocks. Кстати, вы даже можете удалить @RunWith(MockitoJUnitRunner.class) в этом случае.

ОБНОВЛЕНИЕ: И конструктор класса теста, и метод «init» с аннотацией @Before выполняются для каждого теста. Разница в том, что аннотации Mockito обрабатываются между вызовами методов конструктора и @Before.

Таким образом, вы можете немного изменить свой код для достижения положительного результата:

  1. Создать метод «init» (с примечанием @Before) внутри ConnectionManagementControllerImplTest и переместить setTestClass() ] в конструктор (в этом конкретном случае вы также можете удалить весь конструктор, поскольку он будет содержать только super() вызов).
  2. Добавьте super.init() после строки setTestClass() (в противном случае метод "init" в родительском классе будет игнорироваться JUnit).
  3. (Необязательно) вы также можете удалить аннотацию @Before из метода «init» в родительском классе, если ваши тесты написаны таким же образом.

Пример кода, измененного таким образом:

public abstract class AbstractBaseTest<C> {

    public MockMvc mockMvc;

    private Class<C> clazz;

    private Object inject;

    protected abstract String getURL();

    protected final void setTestClass(final Class<C> classToSet, final Object injectToSet) {
        clazz = Preconditions.checkNotNull(classToSet);
        inject = Preconditions.checkNotNull(injectToSet);
    }

    @Before //this annotation can be removed
    public void init() throws Exception {
        MockitoAnnotations.initMocks(clazz); //this line also can be removed because MockitoJUnitRunner does it for you
        mockMvc = MockMvcBuilders.standaloneSetup(inject).build();
    }

    protected MockHttpServletResponse getResponse(MediaType produces) throws Exception {
        MockHttpServletResponse response = mockMvc.perform(
                get(getURL()).
                        accept(produces)).
                andReturn().
                getResponse();
        return response;
    }

    protected MockHttpServletResponse postResponse(String content , MediaType consumes , MediaType produces) throws Exception {
        MockHttpServletResponse response = mockMvc.perform(
                post(getURL()).
                        content(content).
                        contentType(consumes).
                        accept(produces)).
                andReturn().
                getResponse();
        return response;
    }
}
@RunWith(MockitoJUnitRunner.class)
public class ConnectionManagementControllerImplTest extends AbstractBaseTest<ConnectionManagementControllerImpl> {

    @Mock
    private ConnectionManagementBusinessService connectionManagementBusinessServiceMocked;

    @InjectMocks
    private ConnectionManagementControllerImpl connectionManagementControllerMocked;

    //constructor can be removed
    public ConnectionManagementControllerImplTest() {
        super();
    }

    @Before
    public void init() throws Exception {
        setTestClass(ConnectionManagementControllerImpl.class, connectionManagementControllerMocked);
        super.init();
    }

    @Test
    public void countConnectionsByInterval() throws Exception {

        // given
        given(connectionManagementBusinessServiceMocked.countConnectionsByInterval(Mockito.anyString()))
                .willReturn(new ArrayList<ConnectionsCountDto>());

        // when
        MockHttpServletResponse response = postResponse("day", MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON_UTF8);

        // then
        assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
    }

    @Override
    protected String getURL() {
        return "/management/countConnectionsByInterval";
    }
}

P.S. Я бы предпочел первый подход, но если вы не хотите иметь установщик для ConnectionManagementBusinessService, вы можете выбрать второй. Я проверил их обоих, и результат был одинаковым.

17
задан Camilo Díaz Repka 9 October 2008 в 13:36
поделиться

3 ответа

Точка является частью пакет graphviz , который является довольно чертовски прохладным/полезным инструментом. Конечно, Вам будет нужно что-то для генерации точечных файлов для graphviz. Я использовал SchemaSpy несколько раз в прошлом, и он работает вполне прилично, если Вам определили отношения в базе данных.

14
ответ дан 30 November 2019 в 13:34
поделиться

Microsoft Visio легко сделает это.

4
ответ дан 30 November 2019 в 13:34
поделиться

Точка является многоплатформенной и может быть полезной.

1
ответ дан 30 November 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: