July 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 != “”

  • Current Mood
    good good
  • Tags
    ,