Комментарии 11
Спрячьте код под кат и поправьте его форматирование
Спасибо, очень интересно
Тестирование на товары с отрицательными ценами. Ожидаемый результат: игнорировать такие товары и вернуть сумму только положительных цен.
Но ведь проверять отрицательность цены должны другие тесты (валидаторы?), а не все подряд, кто имеет хоть какую-то возможность эту цену прочитать. Наличие отрицательных цен - это совершенно отдельный вопрос к бизнесу (возможно/не возможно), и его постоянное "учитывание", как в тестах, так и в остальной логике, лишь усложняет разработку.
согласен, но тут сферический конь в вакууме. В реальной жизни надо добавлять большое количество уточняющих запросов, ну и качать навыки код-ревью. Опять же, если тесты реализованы какими-то продвинутыми паттернами, самописной логикой(что-то типа собственного фреймворка), то придется натаскивать ИИ на эту задачу.
неплохая статья, хотелось бы услышать еще про copilot, слышал что он тоже довольно неплох и его, вроде как, можно юзать в коммерции
создания заглушек (moq).
А точно "moq", а не "mock"?
Попробуйте machinet dot net
Да ну, ерунда...
Вопрос: "Какие тестовые случаи следует рассмотреть для метода 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 с помощью операторов преобразования.
ChatGPT в написании юнит тестов