Ваш тест не проходит, потому что вы точно ловите 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
Надеюсь, это будет то, что вы ищете.
Вы можете использовать фабричную функцию 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
Просто запустите job2 из сферы действия job1. Job2 унаследует область, и поэтому, если job1 отменяется, то и job2 тоже.