Тестирование приложений Spring Boot, использующих Java Swing - PullRequest
0 голосов
/ 09 октября 2018

Хотя я понимаю, что это может быть не самый типичный вариант использования, мне нужно было включить Spring Boot в приложение Java Swing.Частично я смог сделать это, сославшись на эту статью .

Однако теперь у меня возникла проблема с тестированием.В частности, если я пытаюсь запустить тест JUnit, такой как:

  @RunWith(SpringRunner.class)
    @SpringBootTest
    @ActiveProfiles("dev")
    @Transactional
    public class MapperTest {
    @Test
    public void testMapping() {
        Report rep = appMapper.mapReportDTO(dto);
        assertThat(rep.getDateSubmitted()).isEqualTo(dto.getDateSubmitted());
        assertThat(rep.getCoverageYear()).isEqualTo(dto.getCoverageYear());

        assertThat(rep.getSpouse().getSpouseSSN()).isEqualTo(dto.getSpouse().getSpouseSSN());

        assertThat(rep.getAgreements().size()).isEqualTo(dto.getAgreements().size());
        for (ReportAgreement agree : rep.getAgreements()) {
            assertThat(agree.getSignature()).isNotEmpty();
            assertThat(agree.getSignatureDate()).isNotEmpty();
        }

        assertThat(rep.getBeneficiaries().size()).isEqualTo(dto.getBeneficiaries().size());
        for (BenReport ben : rep.getBeneficiaries()) {
            assertThat(ben.getBenFirst()).isNotEmpty();
            assertThat(ben.getBenLast()).isNotEmpty();
            assertThat(ben.getBenSSN()).isNotEmpty();
            assertThat(ben.getBenType()).isNotEmpty();
        }

        assertThat(rep.getDependents().size()).isEqualTo(dto.getDependents().size());
        for (DependentReport dep : rep.getDependents()) {
            assertThat(dep.getDepDOB()).isNotNull();
            assertThat(dep.getDepLast()).isNotEmpty();
            assertThat(dep.getDepFirst()).isNotEmpty();
            assertThat(dep.getDepSSN()).isNotEmpty();
        }

        assertThat(rep.getVisDependents().size()).isEqualTo(dto.getVisionDeps().size());
        for (VisionDepReport vis : rep.getVisDependents()) {
            assertThat(vis.getVisDOB()).isNotNull();
            assertThat(vis.getVisFirst()).isNotEmpty();
            assertThat(vis.getVisLast()).isNotEmpty();
        }
    }

    // code omitted for brevity
    }

, я получаю java.awt.HeadlessException.На самом деле мне не нужно тестировать какой-либо из компонентов GUI, только функцию некоторых @Beans.Однако я понимаю, что проблема возникает из-за того, что мой класс @SpringBootApplication вызывает элементы GUI.

    @SpringBootApplication
public class EntryFrame extends JFrame {

    private JPanel contentPane;
    private JButton uploadBtn;
    private final static String APP_DIR = "C:/Users/Kelly Marchewa/workspace/TestEnv/InsuranceApplications";
    @Autowired
    private DataAccessService service;
    @Autowired
    private IReportService reportService;
    @Autowired
    private IHTMLConverter htmlConverter;

    public JEditorPane editorPane;

    private JTable dataTable;

    public EntryFrame() {

    }

    public static void main(String[] args) {

        ConfigurableApplicationContext ctx = new SpringApplicationBuilder(EntryFrame.class).headless(false).run(args);

        EventQueue.invokeLater(() -> {
            EntryFrame ex = ctx.getBean(EntryFrame.class);
            ex.setVisible(true);
            ex.initUI();
        });
    }

    @Transactional
    void initUI() {
// code omitted for brevity
}

}

Большинство @Beans, которые мне нужно протестировать, находятся в отдельном классе @Configuration:

@Configuration
public class AppConfig {

@Bean
public EntityManager entityManager() {
    EntityManagerFactory sessionFactory = Persistence.createEntityManagerFactory("com.midamcorp.insuranceui");
    return sessionFactory.createEntityManager();
}

@Bean
public ObjectMapper objectMapper() {
    return new ObjectMapper();
}

@Bean
public IFileParser fileParser() {
    return new FileParser(objectMapper());
}

@Bean
public IReportService reportService() {
    return new ReportService();
}

@Bean
public EntryFrame entryFrame() {
    return new EntryFrame();
}

@Bean
public ModelMapper mapper() {
    ModelMapper mapper = new ModelMapper();
    return mapper;
}

@Bean
public MutableDataHolder mutableDataHolder() {
    MutableDataHolder opts = new MutableDataSet();
    opts.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create()));
    return opts;
}

@Bean
public Parser parser() {
    return Parser.builder(mutableDataHolder()).build();
}

@Bean
public HtmlRenderer renderer() {
    return HtmlRenderer.builder(mutableDataHolder()).build();
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...