понедельник, 12 ноября 2012 г.

Юнит тестирование в C#. Unit test in C#. Использование mock объектов.

Начнем с основ. Википедия нам с радостью скажет, что mock-объект это объект-имитация или объект-пародия. Данные объекты нужны для упрощения написания модульных тестов зависимых от смежных проектов. Например у нас есть большой проект, в рамках которого работает несколько команд над своими проектами. Архитекторы с аналитиками проработали и согласовали интерфейсы. Но сложность и скорость разработки у каждой команды своя. А у нас есть зависимый от другой команды код, в котором планируется получать значение из сервиса разрабатываемого другой командой. В том числе и при написании тестов. В данном случае нам на помощь и приходят различные mock фреймворки.

 Небольшое отступление. В Visual studio 2012 в тестовом фреймворке есть namespace System.Fakes. Который предоставляет встроенные заглушки.  

Мой выбор пал на Moq. Т.к. его хвалили на stackoverflow :). 
И так предположим у нас есть интерфейс
public class Contracts { public interface IUrlManager { UrlList GetByUserGuid(Guid id); } public enum UrlList { First = 1, Second = 2, } }
В коде теста нам необходимо используя скаченный фреймворк "заглушить" или как еще говорят застабить, сервис, который его должен реализовывать. 
Все стандартно в Reference тестового проекта подключаем Moq.dll

Далее в коде теста создаем мок по нужному нам интерфейсу.

var moc = new Mock(); // затем используя лямбда выражение пишем простую реализацию метода moc.Setup(urlmanager => urlmanager.GetByUserGuid(new Guid("cb1e6c68-8750-4234-aaf1-abcaa3583eff"))).Returns(Contracts.UrlList.First) // вызываем метод var mocresult = moc.Object.GetByUserGuid(new Guid("cb1e6c68-8750-4234-aaf1-abcaa3583eff"));

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


среда, 16 сентября 2009 г.

Скрипт отправки email на VB

Данный скрипт создавался в Visual Studio 2008. Вообщем используется Visual Basic 2008 основанный на .NET Framework. Тип создаваемого проекта Vb Console Application Project. Пример приведен для почтовых серверов mail.ru.




Module SendMail
'Задать путь к System.Net.Mail в Reference
Dim email As New MailMessage 'Если в Reference путь не задан, то можно System.Net.Mail.MailMessage
Dim smtp As SmtpClient 'аналогично как выше


Sub Main()



smtp = New SmtpClient("smtp.mail.ru", 2525) ' с 25 портом не работает
smtp.Credentials = New NetworkCredential("login", "password")
email.From = New MailAddress("aaa@evil")
email.To.Add(New MailAddress("aaa@god"))
email.Body = "test"
email.Subject = "ttt"


Try

smtp.Send(email)

Catch ex As Exception



End Try


Console.ReadKey()
End Sub




End Module


Что меня больше всего удивило так это то, что в начале надо создать SMTP объект со свойствами авторизации, а затем уже задавать свойства объекта MailMessage. Если сделать наоборот, то скрипт не работает.


Думаю, что в одном из последующих постов приведу пример QTP функции для отправки email