Как мне написать модульный тест для этого класса, используя JUnit? - PullRequest
0 голосов
/ 02 июля 2019

Это мой первый модульный тест, который я пишу с нуля.Я хочу проверить 5 условий (Member, MeetingActivity, ServiceActivity, LetterActivity и ReceiptActivity).Я использовал ярлык eclipse для генерации тестового примера JUnit.Я прочитал статьи о тестировании JUnit и все еще нуждаюсь в руководстве.Вот что у меня так далеко.

Как мне вызвать метод для проверки условий?

@Test
public void testBuild() {

    Member memberActivity(String memberId) {
        Member activity = new Member();
        activity.setDeliveryType("Some Delivery Type");
        activity.setDocumentType("Some Document Type");

        return activity; 
    }
}

Вот класс:

public class MessageBuilder {

    private final EventPayload messagePayload;

    public MessageBuilder(){
        messagePayload = new EventPayload();
    }

    public EventPayload build(Activity event) {


        createBaseActivity(event);

        if (event instanceof Member) {
            updateToMemberActivity(event);
            return messagePayload;
        }

        if (event instanceof MeetingActivity) {
            updateToMeetingActivity(event);
            return messagePayload;
        }

        if (event instanceof ServiceActivity) {
            updateToServiceActivity(event);
            return messagePayload;
        }

        if (event instanceof LetterActivity) {
            updateToLetterActivity(event);
            return messagePayload;
        }

        if (event instanceof ReceiptActivity) {
            updateToReceiptActivity(event);
            return messagePayload;
        }

        return messagePayload;

    }


    private EventPayload createBaseActivity(Activity event) {

        messagePayload.setId(event.getId());
        messagePayload.setMemberId(event.getMemberId());
        messagePayload.setActivityDateTime(event.getActivityDateTime());

        messagePayload.setMemberIdIsPrimaryId(event.isMemberIdIsPrimaryId());
        messagePayload.setBuCode(event.getBuCode());
        messagePayload.setStateCode(event.getStateCode());
        messagePayload.setProductCode(event.getProductCode());
        messagePayload.setBusinessUnit(event.getBusinessUnit());

        messagePayload.setActivityType(event.getActivityType());
        messagePayload.setActivityIntent(event.getActivityIntent());
        messagePayload.setActivityAction(event.getActivityAction());
        messagePayload.setActivityStatus(event.getActivityStatus());
        messagePayload.setSourceSystem(event.getSourceSystem());
        messagePayload.setCaseId(event.getCaseId());
        messagePayload.setInitiatedBy(event.getInitiatedBy());
        messagePayload.setActivityDetailsPointer(event.getActivityDetailsPointer());
        messagePayload.setBusinessLine(event.getBusinessLine());

        messagePayload.setEventInstanceType(EventInstanceType.ACTIVITY.name());

        return messagePayload;
    }

    private EventPayload updateToMemberActivity(Activity event) {

        Member subTypedEvent = (Member) event;

        messagePayload.setDeliveryType(subTypedEvent.getDeliveryType());
        messagePayload.setDocumentType(subTypedEvent.getDocumentType());
        messagePayload.setEventInstanceType(EventInstanceType.MEMBER.name());

        return messagePayload;
    }

    private EventPayload updateToMeetingActivity(Activity event) {

        MeetingActivity subTypedEvent = (MeetingActivity) event;

        messagePayload.setDeliveryType(subTypedEvent.getDeliveryType());
        messagePayload.setDocumentType(subTypedEvent.getDocumentType());
        messagePayload.setEventInstanceType(EventInstanceType.MEETING.name());

        return messagePayload;
    }


    private EventPayload updateToServiceActivity(Activity event) {

        ServiceActivity subTypedEvent = (ServiceActivity) event;

        messagePayload.setReceivedBy(subTypedEvent.getReceivedBy());
        messagePayload.setConcernedParty(subTypedEvent.getConcernedParty());
        messagePayload.setSummary(subTypedEvent.getSummary());
        messagePayload.setEventInstanceType(EventInstanceType.SERVICE.name());

        return messagePayload;
    }


    private EventPayload updateToLetterActivity(Activity event) {

        LetterActivity subTypedEvent = (LetterActivity) event;

        messagePayload.setDeliveryType(subTypedEvent.getDeliveryType());
        messagePayload.setDocumentType(subTypedEvent.getDocumentType());
        messagePayload.setPaymentType(subTypedEvent.getPaymentType());
        messagePayload.setEventInstanceType(EventInstanceType.LETTER.name());

        return messagePayload;
    }

    private EventPayload updateToReceiptActivity(Activity event) {

        ReceiptActivity subTypedEvent = (ReceiptActivity) event;

        messagePayload.setPaymentType(subTypedEvent.getPaymentType());
        messagePayload.setEventInstanceType(EventInstanceType.RECEIPT.name());

        return messagePayload;
    }

}

Я надеюсь на 100% покрытие.

1 Ответ

1 голос
/ 02 июля 2019

Самый простой способ охватить все ветви - это накормить класс насмешками определенных типов.

В Java-мире есть много фреймворков, где я предпочитаю Mockito

Когда вам нужно указывать макет для каждого занятия подкласса.

, например

Member memberMock = Mockito.mock(Member.class);

и для каждой функции, вызываемой в этом макете, вы должны указать возвращаемое значение, которое можно проверить в результирующем EventPayload следующим образом

when(memberMock.getId()).thenReturn(4711);

Краткая версия теста, проверяющего ветку Member, будет выглядеть следующим образом:

Member memberMock = Mockito.mock(Member.class);
when(memberMock.getId()).thenReturn(4711);
//[...] here are the other calls mocked [...]


MessageBuilder messageBuilder = MessageBuilder();
EventPayload testSubject = messageBuilder.build(memberMock)

assertEquals(testSubject.id, 4711)
//[...] other asserts [...]

Вы также можете подумать о реорганизации классов, чтобы получить лучшую архитектуру и, следовательно, лучшую тестируемость, но это выходит за рамки этого объяснения

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