JUNIT весной: @RunWith (SpringJUnit4ClassRunner.class) пропускает выполнение метода run - PullRequest
0 голосов
/ 04 апреля 2020

Использование аннотации @RunWith (SpringJUnit4ClassRunner.class) запускает мое приложение, в котором пользовательский интерфейс выводится на консоль. Из-за этого при выполнении тестов интерфейс всплывает и остается там. Я хочу знать, есть ли способ обойти запуск метода "run", в то же время выполняя мои тесты JUNIT.

ПРИМЕЧАНИЕ. Но пока, пожалуйста, помогите обойти метод run, так как он останавливает мою программу на неопределенный срок вместо запуска моих тестов. Есть ли еще какие-нибудь аннотации, которые я мог бы добавить в свой тест JUNIT, который все еще будет автоматически связывать мой репозиторий, но не должен запускать главное приложение моего приложения?

    @SpringBootApplication
public class MerlinApplication implements CommandLineRunner {

    private AssetRepository assetRepository;
    private AssetTypeRepository assetTypeRepository;
    private AssetService assetService;
    private AssetTypeService assetTypeService;
    private OrderRepository orderRepository;
    private UserMenu userMenu;

    public MerlinApplication(AssetRepository assetRepository, AssetTypeRepository assetTypeRepository, OrderRepository orderRepository) {
        this.assetRepository = assetRepository;
        this.assetTypeRepository = assetTypeRepository;
        this.orderRepository = orderRepository;
        assetService = new AssetService(assetRepository, assetTypeRepository);
        assetTypeService = new AssetTypeService(assetTypeRepository);
        userMenu = new UserMenu(assetRepository, assetTypeRepository, assetService, assetTypeService, orderRepository);
    }

    public static void main(String[] args) {
        SpringApplication.run(MerlinApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        userMenu.start(); //this pops up the menu.
    }
}

JUNIT TEST

@SpringBootTest
@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration
public class TestAssetTypeService {

    @Autowired
    private AssetTypeRepository assetTypeRepository;
    private AssetTypeService assetTypeService;

    @Before
    public void before(){
        this.assetTypeService  = new AssetTypeService(assetTypeRepository);
    }

    @Test
    public void testImportAssetTypeCSVDuplicateInCSV() {
        List<Object> results = assetTypeService.importAssetTypeCSV("src/test/java/edu/ben/Merlin/AssetTypeTest.csv");
        boolean duplicateFound = false;
        for (String failedResult : (List<String>) results.get(1)) {
            if (failedResult.contains("Asset Type already exists in database: ")) {
                duplicateFound = true;
            }
        }
       assertThat(duplicateFound);
    }

Вот что JUNIT на консоли выполняет:

введите описание изображения здесь

...