Pex

Mar. 6th, 2010 10:10 am
alexey_rom: (Default)
Они это сделали! Я и не надеялся уже, но Pex будет доступен в VS 2010 (и 2008) Pro, а не только в Team Suite.

Для тех, кто не встречался с Pex: это дальний родственник QuickCheck для .Net (в первую очередь для C#). Дальний потому, что аргументы, на которых проверяются свойства, генерируются не случайно, а с помощью анализа тестируемого кода и попытки подобрать значения так, чтобы пройти по всем возможным потокам управления, а потом сохраняются в виде обычных юнит-тестов.

Теперь ещё бы статическую проверку контрактов в VS Pro и будет совсем замечательно.
alexey_rom: (Default)
Bart de Smet пишет о новой Reactive Framework, которая войдёт в .NET 4.0 (очень интересная и полезная библиотека, кстати; и многие идеи взяты опять-таки из ФП, а точнее из Functional Reactive Programming).

В своём последнем посте он упомянул комбинатор Using, служащий для выделения ресурса и его освобождения после завершения работы с последовательностью. ... )
alexey_rom: (Default)
Два хороших, по-моему, применения принципа DRY на C#.

1. Как улучшить проверку аргументов и заменить

if (dst == null)
throw new ArgumentNullException(”dst”);

if (src == null)
throw new ArgumentNullException(”src”);

if (dstOffset + length > dst.Length || dstOffset < 0)
throw new ArgumentOutOfRangeException(
“dst, dstOffset, length”,
string.Format(”dst range is not within bounds, ({0} + {1}) > {2}”, dstOffset, length, dst.Length));

if (srcOffset + length > src.Length || srcOffset < 0)
throw new ArgumentOutOfRangeException(
“src, srcOffset, length”,
string.Format(”src range is not within bounds, ({0} + {1}) > {2}”, srcOffset, length, src.Length));

if (length < 0)
throw new ArgumentOutOfRangeException(”length”, “length must be >= 0, ” + length.ToString());

на

Validate.Begin()
.IsNotNull(dst, “dst”)
.IsNotNull(src, “src”)
.Check()
.IsPositive(length)
.IsIndexInRange(dst, dstOffset, “dstOffset”)
.IsIndexInRange(dst, dstOffset + length, “dstOffset + length”)
.IsIndexInRange(src, srcOffset, “srcOffset”)
.IsIndexInRange(src, srcOffset + length, “srcOffset + length”)
.Check();

без выделения объектов в случае отсутствия исключений.

2. Как автоматически получить осмысленные сообщения об ошибке в юнит-тестах:
Test.Assert(() => customer.Name != null && customer.Name != “”)
при пустом customer.Name даёт
TestCustomerDefaultPropertyValues failed.  Values are same.  Expected not “”, got “”.  customer.Name != “”

alexey_rom: (Default)
Microsoft гарантирует свободное использование стандартов C# и CLI под Community Promise (обещанием сообществу). Объявление. Условия Community Promise.
alexey_rom: (Default)
Как можно с ними работать, а как -- нет. Сказано, что относится к проверяемым исключениям, как в Java, но на самом деле плохой вариант встречается и в C# (хотя реже).

http://geekandpoke.typepad.com/geekandpoke/2009/06/simply-explained-checked-exceptions.html
alexey_rom: (Default)
Документация на System.Char. Это, блин, базовый тип. Первое предложение:
Represents a Unicode character.
В третьем абзаце:
Most Unicode characters can be represented by a single Char object, but a character that is encoded as a base character, surrogate pair, and/or combining character sequence is represented by multiple Char objects. For this reason, a Char structure in a String object is not necessarily equivalent to a single Unicode character.
И ведь всё это вроде как сверяется, вылизывается, и никто не замечает, что на одной странице два противоположных утверждения.

Кодировки, которые реализованы в System.Text.Encoding: UTF7, UTF8, UTF32 и Unicode.
alexey_rom: (Default)
Появился пакет, который позволяет вызывать Хаскель из .Net и наоборот: haskell.forkio.com/dotnet

Пример оттуда:

module FileDialog where

import NET

selectFile :: IO String
selectFile = do
  obj <- new "System.Windows.Forms.FolderBrowserDialog"
  (obj :: Object ()) # invoke_ "ShowDialog" ()
  obj # getField "SelectedPath" ()

Выглядит очень интересно.

Profile

alexey_rom: (Default)
alexey_rom

April 2012

S M T W T F S
1 234567
89 1011121314
15161718192021
22232425262728
2930     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 25th, 2017 06:21 am
Powered by Dreamwidth Studios