что должно быть возвращено, если сервис не может быть реализован - PullRequest
0 голосов
/ 17 марта 2020

Предположим, у меня есть метод, который переводит некоторые деньги от пользователя к другому пользователю, но если текущий баланс меньше суммы денег, которую пользователь хотел перевести, он не сможет перевести. что должно быть возвращено, чтобы показать, что транзакция успешно реализована или нет. Как правильно это сделать?

Класс обслуживания

@Service
public class TransactionService {
    public TransactionService(){

    }
    public void transferBalanceToAccount(Account senderAccount, Account receiverAccount,Long transferBalance){   
        if(senderAccount != null && receiverAccount != null){
            // get both account balance
            Long senderCurrentBalance = senderAccount.getBalance();
            Long receiverCurrentBalance = receiverAccount.getBalance();

            if(senderCurrentBalance < transferBalance) {
                // i have no idea what to do
                return;
            }

            senderAccount.setBalance(senderCurrentBalance - transferBalance);
            receiverAccount.setBalance(receiverCurrentBalance + transferBalance);
        }
    }
}

Модульное тестирование

@Test
    public void transferBalanceToAccountShouldNotBeAbleToTransfer(){
        // Arrange
        Account sender = new Account();
        sender.setBalance(0L);
        Account receiver = new Account();
        receiver.setBalance(100L);

        // Act
        transactionService.transferBalanceToAccount(sender, receiver, 10L);

        // Assert
        // I'm struggling
        assertEquals();
    }

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Вы должны создать специальное исключение, например InsufficientFundsException, и обработать его в соответствии с вашими потребностями. В тесте вы можете проверить исключение, например, изменив аннотацию. В Юнитах:
@Test(expected = InsufficientFundsException.class)

1 голос
/ 18 марта 2020

Для REST API вы должны подумать о том, как вы делаете это с веб-сайтом и HTML формами (в конце концов, всемирная паутина - это эталонное приложение для REST архитектурного стиля ) .

Для примера, такого как нехватка средств, мы отправили бы обратно веб-страницу со словами: «Извините, для этого недостаточно денег». Представление HTML будет находиться в теле сообщения ответа, потому что именно к этому относится заказная информация - это информация, адресованная конечному клиенту, которая должна игнорироваться компонентами общего назначения, участвующими в обмене данными.

Строка состояния и заголовки зарезервированы для информации из домена «передача документов по сети», которая должна быть понятна компонентам общего назначения.

В этом случае сообщение было обработано правильно, но не дало ожидаемого эффекта. Поэтому мы хотим использовать код состояния ошибки клиента 4xx.

Какой? 403 Запрещено - прямой ответ

Код состояния 403 (Запрещено) указывает, что сервер понял запрос, но отказывается его авторизовать. Сервер, который хочет опубликовать c, почему запрос был запрещен, может описать эту причину в полезной нагрузке ответа (если есть).

Другая возможность - 409 Конфликт

Код состояния 409 (Конфликт) указывает, что запрос не может быть выполнен из-за конфликта с текущим состоянием целевого ресурса. Этот код используется в ситуациях, когда пользователь может разрешить конфликт и повторно отправить запрос.

Например, в вашем примере пользователь может разрешить конфликт, изменив количество деньги в запросе.

Марк Ноттингем обращает внимание на спецэффекты кода состояния - что будут делать компоненты общего назначения по-другому? К сожалению, я не смог найти точных определений этих эффектов - в некоторых случаях намеки на них разбросаны по стандарту, но большую часть времени ????

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