Я, должно быть, схожу с ума, потому что мои модульные тесты терпят неудачу, потому что следующий код выдает исключение нулевой ссылки:
int pid = 0;
if (parentCategory != null)
{
Console.WriteLine(parentCategory.Id);
pid = parentCategory.Id;
}
Строка, которая бросает это:
pid = parentCategory.Id;
console.writeline предназначен только для отладки в графическом интерфейсе NUnit, но при этом выдается действительный int.
Редактировать: Он однопоточный, поэтому его нельзя присвоить нулю из другого потока, и тот факт, что Console.WriteLine успешно выводит значение, показывает, что он не должен выбрасывать.
Редактировать: Соответствующие фрагменты класса Категория:
public class Category
{
private readonly int id;
public Category(Category parent, int id)
{
Parent = parent;
parent.PerformIfNotNull(() => parent.subcategories.AddIfNew(this));
Name = string.Empty;
this.id = id;
}
public int Id
{
get { return id; }
}
}
Ну, если кто-то хочет посмотреть полный код, он находится в Google Code на http://code.google.com/p/chefbook/source/checkout
Я думаю, что попробую перезагрузить компьютер ... Я видел довольно странные вещи, исправленные перезагрузкой. Обновится после перезагрузки.
Обновление: Загадка раскрыта. Похоже, NUnit показывает строку ошибки как последний успешно выполненный оператор ... Копирование / вставка теста в новое консольное приложение и запуск в VS показали, что это была строка после блока оператора if (не показан), который содержал нулевую ссылку. Спасибо всем за идеи. +1 всем, кто ответил.