Введение “Не консолью единой живы люди” - подумал я и решил, что надо попробовать наваять простое веб-приложение на Play! Framework. Play! Framework - это MVC фреймворк для создания веб-приложений на Java/Scala. На первый (да и на второй, если честно) взгляд кажется довольно простым и ничем особо не отличающимся от других подобных фреймворков. Однако, есть мнение, что для версии 2.x надо брать на вооружение Scala, а для Java лучше подойдет более взрослая версия 1.
Неожиданно для себя решил немного повернуть в сторону функциональщины. В качестве экспериментального языка было принято решение взять Scala. Побаловавшись с примерами с курса от Twitter решил попробовать написать что-нибудь простое. Например, консольное приложение для поиска вопросов на StackOverflow. В качестве IDE использовал IntelliJ Idea 14 Community Edition с плагином для Scala (все устанавливается очень просто). Для сборки и запуска приложения использую SBT. Для этого потребуется создать конфигурационный файл build.sbt с описанием зависимостей и прочего.
На сайте ASP.NET MVC есть контроллер с методами: [code lang=text] [HttpGet] public void Get(int? id) { // получение объекта } [HttpPost] public void Create(Model model) { // создание объекта } [HttpDelete] public void Delete(int? id) { // удаление объекта } [HttpPut] public void Update(int? id, Model model) { // изменение объекта } [/code] При обращении к методам AJAX- запросам GET и POST работают корректно, но методы DELETE и PUT не выполняются
В прошлый раз разобрали самые простые варианты реализации тестов с использованием фреймворка NUnit. Сегодня остановлюсь на несколько более сложных примерах с использованием стандартных атрибутов NUnit: SetUp, ExpectedException и Ignore. В существующий проект добавим класс Account: [code lang=CSharp] public class Account { private decimal balance; public void Deposit(decimal amount) { balance += amount; } public void Withdraw(decimal amount) { balance -= amount; } public void TransferFunds(Account destination, decimal amount) { } public decimal Balance { get { return balance; } } } [/code] Напишем первый тест.
Представим следующую ситуацию: вы пилите некоторую функциональность в основной ветке проекта (бывает такое, согласитесь?). В некоторый момент приходит осознание того, что заливать это в TFS нет никакой возможности (фича не доделана, появились более приоритетные задачи…). И удалять, конечно же, тоже нельзя. Единственно верное решение – создать новую ветку и отправить изменения в неё. Однако, как оказалось, это не так-то и просто: Алгоритм:
Создаем Shelvset “feature for new branch” в основной ветке (пусть она называется MAIN) Создаем ветку от MAIN MyNewFeature Устанавливаем Team Foundation Server Power Tools В Visual Studio Command Prompt выполняем команду: tfpt unshelve /migrate /source:$/MyAwesomeProject/MAIN /target:$/MyAwesomeProject/MyAwesomeFeature, где $/MyAwesomeProject адрес проекта в TFS.
В веб-приложении на ASP.NET WebAPI используется база данных MS SQL, генерируемая с использованием Entity Framework 6 Code First. Collation этой базы данных - unicode. Однако, если создавать записи в этой БД с кириллическими символами, используя методы WebAPI-контроллера, русский текст заменяется на вопросительные знаки.
База содержит таблицу Articles:
{ text: ntext, summary: nvarchar } В приложении есть ASP.NET WebAPI-контроллер для работы с этой сущностью с автосгенерированными CRUD-операциями.
Записи пытался создавать различными способами:
NUnit - фреймворк для модульного тестирования и разработки по TDD. Для упорядочивания здесь знаний будет цикл статей о нём.
Что тестировать? Напишем простой класс Fibonacci, который вычисляет число Фибоначчи, с единственным методом Calculate:
namespace SimpleLibrary { public class Fibonacci { public static int Calculate(int x) { if (x <= 0) return 0; if (x == 1) return 1; return Calculate(x - 1) + Calculate(x - 2); } } } Первый тест Отделим тесты от рабочего кода в отдельную сборку: добавьте в свой Solution новый проект Fibonacci.