Home

Advertisement

Customize

Mar. 6th, 2010

Pex

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

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

Теперь ещё бы статическую проверку контрактов в VS Pro и будет совсем замечательно.

Dec. 28th, 2009

Как я не смог подать Microsoft идею

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

В своём последнем посте он упомянул комбинатор Using, служащий для выделения ресурса и его освобождения после завершения работы с последовательностью. ... )

Jul. 8th, 2009

Don't Repeat Yourself

Два хороших, по-моему, применения принципа 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 != “”

Tags: ,

Jul. 7th, 2009

Good news, everyone!

Microsoft гарантирует свободное использование стандартов C# и CLI под Community Promise (обещанием сообществу). Объявление. Условия Community Promise.

Jun. 23rd, 2009

Исключения в ООП

Как можно с ними работать, а как -- нет. Сказано, что относится к проверяемым исключениям, как в Java, но на самом деле плохой вариант встречается и в C# (хотя реже).

http://geekandpoke.typepad.com/geekandpoke/2009/06/simply-explained-checked-exceptions.html
Tags: , ,

Путаница с Юникодом у Микрософта

Документация на 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.
Tags:

Jan. 15th, 2009

Haskell + .Net

Появился пакет, который позволяет вызывать Хаскель из .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" ()

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

Advertisement

Customize