Тестирование JUnit, возвращающее примитивные типы

Я работаю над модульным тестированием с JUnit. В этом конкретном тестовом примере мы проверяем, пуста ли наша корзина или список, тогда мы должны вернуть цену 0.0. Если в метод проверки calculatePrice передается пустая корзина, он должен вернуть цену в виде двойного значения 0.0. Я просто не знаю, как это сделать. Я более или менее пытаюсь убедиться, что цена будет 0.0, когда вы проверяете корзину, но я чувствую себя совершенно не в своей тарелке.

public class Basket {
    
    private List<Object> bookList = new ArrayList<Object>();
    
    public List<Object> getBooksInBasket() {
        return bookList;
    }

}
public class CheckOut {
    
    private double price = 0.0;
    
    public double getCheckOutPrice() {
        return price;
    }

    double calculatePrice(Basket basket) {
        Basket basket1 = new Basket();
        if (((List<Object>) basket1).size()==0)
            return basket.price1=0.0;
        return price;
        
        //return null;
    }
}
public class CheckOutTest {

    @Test
    public void test_CalculatePrice_ReturnsDoubleZeroPointZeroWhenPassedAnEmptyBasket() {
        //Arrange
        Basket basket = new Basket();
        CheckOut checkout = new CheckOut();
        
        //Act       
        checkout.calculatePrice(basket);
        
        //Assert
        
        //assertEquals(0.0,checkout.price);
    }
}

Вы уверены, что утверждение if (((List <Object>) basket1) .size () == 0) работает правильно?

codeLover 24.07.2018 06:37

@GarimaGupta, скорее всего, нет. Пытаюсь понять, как включить список корзин в банкомат с методом оформления заказа.

Ohboyy 24.07.2018 07:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
454
1

Ответы 1

I'm more or less trying to ensure that the price is 0.0 when you check the basket but i feel totally off on something

assertEquals(0.0,checkout.price);

Мне это кажется довольно разумным (если не считать явной опечатки, которую тест пытается прочитать от закрытого члена).

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

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

Другие вопросы по теме