Многие разработчики до сих пор жалуются на трудности с написанием тестов, поэтому идея использования ИИ для генерации тестового кода всегда была заманчивой. CodiumAI — именно такой инструмент.
Переведено с Make Your Dev Life Easier by Generating Tests with CodiumAI,автор David Eastman Был профессиональным разработчиком программного обеспечения в Лондоне, работал в Oracle и BT, а также работал консультантом, помогая командам работать более гибко. Он написал книгу о дизайне пользовательского интерфейса и с тех пор пишет технические статьи...
Многие разработчики до сих пор заявляют, что им не нравится писать тесты, поэтому идея использования ИИ для генерации тестов всегда привлекательна.
Конечно, тестирование не должно быть второстепенной задачей: при разработке через тестирование (TDD) вы сначала пишете тесты. Хотя это хорошая вещь, которую должна попробовать каждая команда, общепринятой практикой является сначала создание минимально жизнеспособного продукта (MVP), а затем продолжение проекта с полным модульным тестированием, если есть доказательства его перспективности.
Я не видел этого раньше CodiumAI,А потому, что он генерирует на главной странице простой и понятный презентационный текст — «Создайте значимый изтест для занятых разработок».,Я был готов попробовать. очевидно,Они пытаются войти в модель OpenAI из GPT, чтобы открыть пространство изинструментов — на самом деле,оно сделано из“GPT-3.5&4 и TestGPT-1» обеспечивает поддержку из.
CodiumAI из реализации в настоящее время работает только с Visual Studio Code и JetBrains; я воспользуюсь первым. я нашел VSC Немного неловко, но, по крайней мере, он с этим справится. C#, это мой любимый язык. но я также знаю JetBrains Изинструмент очень популярен.
в качестве примера,Я буду использовать очень простой класс банковского счета,Есть три метода: вывод, депозит и баланс. Предположим, это простой аккаунт,Нет возможности овердрафта. У нас уже должно быть четкое представление о том, что мы хотим сказать:
Наши рассуждения об этих правилах исходят из разных источников. Первый тест отражает учет бизнес-правил. Второй тест показывает, что использование реальной банковской системы требует комиссии, поэтому допустимым значением может быть ноль;,Но если это так,Нам не следует звонить. Третье правило — это просто ограничение диапазона ввода — это должно быть реализовано с помощью беззнакового ввода.
вернуться в Кодиеум. На странице рынка он, кажется, предпочитает Python、JavaScript и TypeScript, но он также явно показывает действие меню для создания примеров для других языков. Как обычно, Визуал Studio Code Группа окон открылась с беспорядком, но я смог продолжить.
Небольшое диалоговое окно внизу экрана попросило меня войти в Github — что практически везде является нормой.
.NET загрузился, и я позволил ему создать простой консольный проект. Вот код:
public class BankAccount
{
private uint balance;
public string ShowBalance() => $"{CURRENCYSIGN}{balance}";
private const string CURRENCYSIGN = "$";
public void Deposit(uint funds)
{
balance = balance + funds;
Console.WriteLine($"{CURRENCYSIGN}{funds} deposited. Balance now {ShowBalance()}");
}
public void Withdraw(uint funds)
{
if (funds > balance) throw new Exception($"Cannot withdraw {CURRENCYSIGN}{funds}, balance is {ShowBalance()}");
balance = balance - funds;
Console.WriteLine($"{CURRENCYSIGN}{funds} withdrawn. Balance now {ShowBalance()}");
}
static void Main(string[] args)
{
BankAccount ba = new BankAccount();
try {
// Money in
ba.Deposit(20);
//Money out
ba.Withdraw(5);
//Too much ba.Withdraw(25);
}
catch (System.Exception ex)
{
Console.WriteLine($"Error {ex.Messag}");
}
}
}
Из консоли основной метод итест выдает ожидаемый результат:
BankAccount> dotnet run
$20 deposited. Balance now $20
$5 withdrawn. Balance now $15
Error Cannot withdraw $25, balance is $15
Теперь это не очень сложно,Например, нет необходимости в какой-либо моделирующей рамке. Однако,Нас интересует, будет ли доступен этот инструмент.
Хорошо, теперь мы можем попросить CodiumAI сгенерировать тест. Чуть выше класса из находится аккуратное напоминание о том, как генерировать тест:
Во-первых, ИИ Сгенерировано очень приемлемое изложение урока на английском языке:
The BankAccount class represents a bank account and provides methods for depositing and withdrawing funds. It also has a method to display the current balance.
Он предоставляет английские объяснения для всех трех методов. Он также генерирует «предложения кода».,Все это в какой-то степени разумно. Например,Рекомендуется использовать десятичные значения вместо целых чисел без знака. Я оставлю читателю возможность рассмотреть плюсы и минусы этого (если интересно).
Это дает мне уверенность, что он производит изтест. И тест действительно хорош.
Презентация очень красивая. Он генерирует какой-то тест, а суммируя его, можно создать другой тест. Сначала идет счастливый путь:
Вот пример создания двух счастливых путей:
[Test]
public void test_deposit()
{
BankAccount ba = new BankAccount();
ba.Deposit(20);
Assert.AreEqual("$20", ba.ShowBalance());
}
[Test]
public void test_withdraw_more_than_balance()
{
BankAccount ba = new BankAccount();
Assert.Throws<Exception>(() => ba.Withdraw(25));
}
технически говоря,Создание исключений не является частью «счастливого пути».,Но давайте посмотрим правде в глаза - два года назад,Если бы приложение могло понять, что такое «счастливый путь»,Я был бы удивлен. так,Радуйтесь.
В тестрамке хорошо представлен каждый потребительский изтест:
Хорошо, давайте посмотрим на крайние случаи:
Они обрабатывают ситуацию вывода средств с нулевым долларом, что означает, что я могу расширить этот код для удовлетворения своих потребностей, не вызывая при необходимости реальную систему. Обратите внимание, что вы можете генерировать и регенерировать тест по мере необходимости.
И, наконец, «другие» случаи:
Здесь нас интересует максимальное значение учетной записи. Если мы не уверены в использовании целых чисел без знака, мы хотели бы проверить наличие каких-либо регрессий, связанных с изменениями размера учетной записи.
Просмотрите этот инструмент в контексте доступного изAIинструмента.,Я думаю, это хороший пример,Объясните, как ИИ может помочь людям решать тривиальные задачи,Не делая ничего неожиданного. Когда собираешь тестрамку,Вам необходимо настроить и метод демонтажа,и функции поддержки,Это означает, что вы не сможете напрямую поместить сгенерированный изтест в свой код для внесения изменений. Но с моей точки зрения,Рекомендую попробовать CodiumAI,Посмотрите, может ли это стать частью вашей Работы. так или иначе,Сначала дайте ему тестовый запуск.