Сопрограммы правильный способ добавить работу в качестве ребенка от другого?

Ваш тест не проходит, потому что вы точно ловите ParserConfigurationException в своем методе, поэтому его никогда не бросают. Чтобы пройти тест:

1) измените подпись вашего метода (исключение бросания)

public String createCompleteExportXml(String xmlFilename, String content) throws ParserConfigurationException {

2) Бросьте ParserConfigurationException. Для этого вы можете удалить блок catch или выбросить исключение после LOGGER.trace. Пример для второго варианта:

  try {
     //...
  } catch (ParserConfigurationException pce) {
     LOGGER.trace("parsing error ", pce);
     throw pce;
  }

Надеюсь, он вам поможет

[UPDATE]

Если вы хотите имитировать ParserConfigurationException, вы можете использовать фреймворк, подобный Mockito / PowerMock, чтобы высмеять DocumentBuilderFactory и имитировать, что ParserConfigurationException вызывается, когда вызывается метод newDocumentBuilder().

Пример:

@RunWith(PowerMockRunner.class)
@PrepareForTest(DocumentBuilderFactory.class)
public class XmlFileWriterTest {

   @Test(expected = ParserConfigurationException.class)
   public void createCompleteExportXmlWithParseConfigurationException() throws Exception {
      String xmlFilename = "junitExportTestWithParseConfigurationException.xml";
      String content = "any content";
      XmlFileWriter writer = new XmlFileWriter();

      // Mock DocumentBuilderFactory: When method newDocumentBuilder() is called, throws a simulated ParserConfigurationException
      DocumentBuilderFactory mockDocumentBuilderFactory = PowerMockito.mock(DocumentBuilderFactory.class);
      PowerMockito.when(mockDocumentBuilderFactory.newDocumentBuilder()).thenThrow(new ParserConfigurationException("Simulated ex"));

      // Mock DocumentBuilderFactory.newInstance(), when is called, returns your mock instance mockDocumentBuilderFactory
      PowerMockito.mockStatic(DocumentBuilderFactory.class);
      PowerMockito.when(DocumentBuilderFactory.newInstance()).thenReturn(mockDocumentBuilderFactory);

      writer.createCompleteExportXml(xmlFilename, content);
   }

Этот тестовый проход ( с предыдущими предложениями кода).

Зависимости Maven для powerMock:


     org.powermock
     powermock-module-junit4
     1.5.4
  

  
     org.powermock
     powermock-api-mockito
     1.5.4
  

Надеюсь, это будет то, что вы ищете.

Вы можете найти больше документация Mockito и PowerMock

2
задан Sergey 18 February 2019 в 07:40
поделиться

2 ответа

Вы можете использовать фабричную функцию Job(parent: Job?), которая получает родительское задание в качестве параметра. Он имеет следующее определение:

public fun Job(parent: Job? = null): Job

, что означает, что параметр parent является необязательным. Таким образом, вы можете создать свою работу следующим образом:

var parentJob: Job = Job()
var childJob: Job = Job(parentJob)

Также взгляните на SupervisorJob , который можно использовать для настройки поведения по умолчанию Job . SupervisorJob Фабричная функция имеет аналогичное определение:

fun SupervisorJob(parent: Job? = null): Job
0
ответ дан Sergey 18 February 2019 в 07:40
поделиться

Просто запустите job2 из сферы действия job1. Job2 унаследует область, и поэтому, если job1 отменяется, то и job2 тоже.

0
ответ дан user8159708 18 February 2019 в 07:40
поделиться
Другие вопросы по тегам:

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