Pull to refresh

Comments 11

Спрячьте код под кат и поправьте его форматирование

Тестирование на товары с отрицательными ценами. Ожидаемый результат: игнорировать такие товары и вернуть сумму только положительных цен. 

Но ведь проверять отрицательность цены должны другие тесты (валидаторы?), а не все подряд, кто имеет хоть какую-то возможность эту цену прочитать. Наличие отрицательных цен - это совершенно отдельный вопрос к бизнесу (возможно/не возможно), и его постоянное "учитывание", как в тестах, так и в остальной логике, лишь усложняет разработку.

согласен, но тут сферический конь в вакууме. В реальной жизни надо добавлять большое количество уточняющих запросов, ну и качать навыки код-ревью. Опять же, если тесты реализованы какими-то продвинутыми паттернами, самописной логикой(что-то типа собственного фреймворка), то придется натаскивать ИИ на эту задачу.

мне уже кажется, что джуна-мидла натаскивать на неё будет проще и быстрее

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

создания заглушек (moq).

А точно "moq", а не "mock"?

вот честно, много думал над этим вопросом и оставил как руке писалось, по разному пишут, если англицизм - mock
если от фрванцузскго слова-первоисточника - moq
Мне кажется, тут кому как нравится, лично у меня вообще нет окончательного мнения об этом слове

Да ну, ерунда...

Вопрос: "Какие тестовые случаи следует рассмотреть для метода CalculateTotalPrice в классе ShoppingCart, который принимает список товаров и возвращает общую стоимость?"

Мой ответ + код Гены:

Создайте класс price, не принимающий некорректные значения. Тогда юнит тест не понадобится

using System;

public class Price

{

private dynamic value;

public Price(dynamic value) => this.value = value > 0 ? value : throw new ArgumentException("Значение должно быть положительным.", nameof(value));

public static implicit operator Price(int value) => new Price(value);

public static implicit operator Price(float value) => new Price(value);

public static implicit operator Price(double value) => new Price(value);

public static implicit operator double(Price price) => price.value;

public override string ToString() => value.ToString();

}

В этом обновленном коде класс Price содержит внутреннее поле value, тип которого определен как dynamic. Конструктор класса принимает значение и проверяет, что оно положительное. Если значение отрицательное или равно нулю, будет выброшено исключение ArgumentException.

Класс также содержит неявные операторы преобразования (implicit operator) из int, float и double в Price. Они используют выражения-стрелки для определения операторов преобразования. Если переданное значение меньше или равно нулю, будет выброшено исключение ArgumentException.

Оператор преобразования (implicit operator) из Price в double позволяет получить значение в виде double.

Вот пример использования этого класса:

Price price1 = 3.14;

Price price2 = 42;

Price price3 = 5.67f;

double value1 = price1;

int value2 = price2;

float value3 = price3;

Console.WriteLine(price1); // Выводит 3.14

Console.WriteLine(price2); // Выводит 42

Console.WriteLine(price3); // Выводит 5.67

Console.WriteLine(value1); // Выводит 3.14

Console.WriteLine(value2); // Выводит 42

Console.WriteLine(value3); // Выводит 5.67

В этом примере объекты Price могут быть созданы из значений типов double, int и float. Их значения могут быть получены обратно в виде double, int и float с помощью операторов преобразования.

Sign up to leave a comment.