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