Изучаю NUnit. Часть 2

В прошлый раз разобрали самые простые варианты реализации тестов с использованием фреймворка NUnit.

Сегодня остановлюсь на несколько более сложных примерах с использованием стандартных атрибутов NUnit: SetUp, ExpectedException и Ignore.
Continue reading

Check-In в новую ветку в Team Foundation Server 2013

Представим следующую ситуацию: вы пилите некоторую функциональность в основной ветке проекта (бывает такое, согласитесь?).
В некоторый момент приходит осознание того, что заливать это в TFS нет никакой возможности (фича не доделана, появились более приоритетные задачи…).
И удалять, конечно же, тоже нельзя.
Continue reading

MS SQL и русский текст в Unicode

В веб-приложении на ASP.NET WebAPI используется база данных MS SQL, генерируемая с использованием Entity Framework 6 Code First. Collation этой базы данных – unicode. Однако, если создавать записи в этой БД с кириллическими символами, используя методы WebAPI-контроллера, русский текст заменяется на вопросительные знаки.

Continue reading

Изучаю NUnit. Часть 1

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.Tests в котором будут разрабатываться тесты для нашего класса. Переименуем класс Class1 в FibonacciTest.

Добавим через NuGet ссылки на NUnit (собственно, сам фреймоворк) и NUnit Test Adapter (для того, чтобы тесты можно было запускать прямо из Visual Studio).

К тому же необходимо добавить в проекте Fibonacci.Tests ссылку на тестируемую сборку Fibonacci.

Теперь все готово, для того, чтобы вы могли написать свой первый тест с NUnit.

Измените код класса FibonacciTest следующим образом:

using System;
using SimpleLibrary;
using MbUnit.Framework;

namespace SimpleLibrary.Test {
  public class FibonacciTest {
    [Test]
    public void Fibonacci_of_number_greater_than_one() {
      int result = Fibonacci.Calculate(6);
      Assert.AreEqual(8, result);
    }
  }
}

Что мы сделали в предыдущем примере:

  • Импортировали NUnit
  • Добавили новый public метод Fibonacci_of_number_greater_than_one.
  • Добавили к методу Fibonacci_of_number_greater_than_one атрибут [Test].
  • В методе Fibonacci_of_number_greater_than_one добавили вызов метода Assert.AreEqual.

Метод Assert.AreEqual только лишь проверяет, что Fibonacci.Calculate(6) равен 8. Класс Assert очень полезен при написании тестов, т.к. содержит большое количество вспомогательных методов для этого.

Соберите проект и в окне Test Explorer нажмите на ссылку “Run Tests”. Ошибок быть не должно.

Теперь у нас есть первый юнит-тест.

Программная отправка email из .NET-приложения

Код должен отправлять email:

var fromAddress = new MailAddress("shirobokov.andrey@gmail.com", "Andrey Shirobokov");
var toAddress = new MailAddress("shirobokov.andrey@gmail.com", "Shirobokov Andrey");
const string fromPassword = "парольепта";
const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};

using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

​На строке smtp.Send(message) валится ошибка: “SMTP connection rquires a secure connection or client was not authenticated. 5.5.1 Authentication Required”

Решение:

Есть несколько возможных:

  1. Проверьте правильность пароля
  2. Попробуйте понизить уровень безопаснити аккаунта, с которого производится отправка по ссылке: https://www.google.com/settings/security/lesssecureapps
  3. Если, почему-то, у вас стоит UseDefaultCredentials = true – измените на false
  4. Если работает нормально локално, но не работает на продакшн-сервере – попробуйте залогиниться в google-аккаунт на прод. сервере (могут быть проблемы из-за различных timezone/часовых поясов и т.п.)
  5. Попробуйте изменить пароль на более сложный

Как ни странно, мне помог только 5ый пункт
Удачи!

VS2013 и Github

Team Foundation Server 2013 и Visual Studio 2013 “из коробки” научились работать с Github. Причем, работа эта ведется очень удобно.
Однако, при создании нового проекта в github есть нюансы. Здесь я опишу кратко как создать проект, исходный код которого будет храниться в github.

Для начала вам будет необходимо создать ПУСТОЙ репозиторий в Github:
1. Переходите на сайт github.com
2. Создаете репозиторий (кнопка “+” рядом с вашим именем)
3. В появившейся форме заполняете имя репозитория (обязательно) и описание (по желанию)
4. Нажимаете “Create repository”

Sic! Не надо ставить галочку напротив “Initialize this repository with readme” – это приведет к инициализации репозитория и из Visual Studio добавить проект в этот репозитоий уже не получится. Придется пользоваться другими средствами.

Теперь запустите Visual Studio 2013 и создайте тестовый проект. В окне создания проекта поставьте галочку напротив чек-бокса “Add to source control”:
github1

В окне “New Project” жмите “OK”. Вам будет предложен выбор системы хранения кода: TFS или Git. Создастся проект.

Теперь в source control в контекстном меню проекта вам будет доступно действие Commit в группе Source Control. Выполните свой первый коммит. Сейчас данные еще не отправились на сервер.

Для того, чтобы данные были на сервере вам необходимо выполнить Push:

  1. Переходим в Team Explorer
  2. Жмем на кнопку “Home” с изображением домика
  3. Теперь нажимаем на “Unsynced commits”. Отобразятся все коммиты, которые не были синхронизированы с серверомgithub1
  4. Нажимаете кнопку Sync и ваш исходных код отправляется на сервера github
  5. При выполнении первого push вам будет предложено указать URL вашего репозитория. Укажите URL репозитория, который мы создали ранее.

Если вы выполнили все верно, то открыв страницу вашего репозитория в браузере вы увидите там новые файлы, которые вы добавили только что.

Windows Phone и сторонние сервисы

При разработке приложений для Windows Phone, использующих сторонние сервисы (например, клиент для ВКонтакте), нужно помнить, что не каждый проверяющий имеет аккаунт в социальной сети.

Если ваше приложение – клиент для какого-то сервиса или просто использует возможности стороннего сервиса необходимо при публикации его в Windows Phone Store указывать тестового пользователя. В первый раз найти где это сделать не так-то просто:
wps
1. На странице добавления XAP кликаете на “More XAP options” (на картинке обведено красным)
2. Появится еще одно текстовое поле (там, где на картинке большой красный восклицательный знак). Туда и пишите все, что вы хотите, чтобы знали проверяющие ваше приложение модераторы.