Тест JUnit не ловит исключение - PullRequest
0 голосов
/ 28 января 2020

ОБНОВЛЕНИЕ: Вот полный тест:

@Test(expected = NullPointerException.class)
public void testMissingData() throws Exception{
Resource<ObjectDataModel, Content, Status> resource = builder.build(content,  argA1Response, 
            argA2Response, objFilterParam, argA3Response);}

А вот метод build :

public Resource<ObjectDataModel, Content, Status> build(Content argContent,
        ResponseA1 argA1Response,
        ResponseA2 argA2Response, String argObjectTypeFilter,
        ResponseA3 argA3Response) {

    try {
        viewDataModel.setObjectType(this.buildObjectType(filteredObjectType,
                argA1Response.getData().getDataObject().getCategories().get(0).getObjectTypes().get(0)));

    }
    catch (Exception e) {
        String msg = "Exception occoured while buildng the Object Data Model";
        LOG.error(msg, e);
    }

    // we have the required information gathered to return
    return Resource.okFromDataAndContent(viewDataModel, argContent);
}

А вот buildObjectType () method:

private ObjectType buildObjectType(ObjectTypes argA1ProductType,
        PendingObjectTypes argA2ProductType) {
    ProductType objectType = new ObjectType();
    List<Plan> plans = argA1ObjectType.getPlan();
    List<PendingObjectSummary> objPlans = argA1ObjectType.getData();

    if (objectType.getData() == null) {
        objectType.setData(new ArrayList<>());
    }

    PendingObjectSummary tempPlan = null;
    for (Plan currPlan : plans) {
        tempPlan = plans.stream()
                        .filter(plan -> plan.getObjId().equals(currPlan.getObjId()))
                        .findFirst()
                        .orElseThrow(NullPointerException::new);

    }

    return objectType;
}

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

@Test(expected = NullPointerException.class)
public void testMissingData() throws Exception{
    Object<> response = fixture.create();

    assertNotNull(response);
    assertNotNull(response.getData());

    assertNull(resource.getData().getObjectType()); 
}

В моем методе create я просто перебираю кучу объектов, чтобы попытаться найти тот, который соответствует моему ID; если не найден, то выдает NullPointerException :

for (Object currObj : objects) {
        tempObj = myOtherCollection.stream()
                        .filter(obj -> obj.getId().equals(currObj.getId()))
                        .findFirst()
                        .orElseThrow(NullPointerException::new);
    }

Вывод JUnit явно не перехватывает исключение - вот вывод:

java.lang.AssertionError: Expected exception: java.lang.NullPointerException

И мой кот журналы определенно выдают здесь исключение:

18:48:30.015 [main] ERROR com.myCompany.src.ModelBuilder - Exception occoured while buildng the Data Model
java.lang.NullPointerException: null
at java.util.Optional.orElseThrow(Optional.java:290)

Единственная проблема, которую я могу видеть, заключается в том, что, возможно, когда я назначаю tempObj , что код неправильный. Я что-то упускаю из виду? Спасибо за любые полезные советы.

Ответы [ 2 ]

3 голосов
/ 28 января 2020

Вы перехватываете исключение nullpointer, поэтому исключение не распространяется на ваш тест.

см.

try {
    viewDataModel.setObjectType(this.buildObjectType(filteredObjectType,
            argA1Response.getData().getDataObject().getCategories().get(0).getObjectTypes().get(0)));

}
catch (Exception e) {
    String msg = "Exception occoured while buildng the Object Data Model";
    LOG.error(msg, e);
}

Если вы хотите проверить исключение, вы можете выбросить исключение в свой обрабатывать ошибки (например, пользовательский ObjectCreationExcepion) и утверждать, что он выбрасывается, например

try {
    viewDataModel.setObjectType(this.buildObjectType(filteredObjectType,
            argA1Response.getData().getDataObject().getCategories().get(0).getObjectTypes().get(0)));

}
catch (Exception e) {
    String msg = "Exception occoured while buildng the Object Data Model";
    LOG.error(msg, e);
    throw new ObjectCreationException(msg);
}

и в вашем тесте

@Test(expected = ObjectCreationException.class) 
public void testMissingData() throws Exception{
    Object<> response = fixture.create();  
}

@ Test (ожидается = ObjectCreationException. класс) обрабатывает только исключения, которые не обрабатываются в тестируемом коде ИЛИ сам тест.

0 голосов
/ 28 января 2020

То, что вы могли бы сделать, это

public Resource<ObjectDataModel, Content, Status> build(Content argContent,
        ResponseA1 argA1Response,
        ResponseA2 argA2Response, String argObjectTypeFilter,
        ResponseA3 argA3Response) throws NullPointerExceptions // << notice thrwoing declatration
{ // do some stuf} 

, и тогда в тесте вы можете справиться с этим, как вы, пытаясь с помощью

public void testMissingData() throws Exception{
Resource<ObjectDataModel, Content, Status> resource = builder.build(content,  argA1Response, 
            argA2Response, objFilterParam, argA3Response);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...