Я использую Moq, NUnit, WPF, MVVM, Ninject.
Я пишу тест для моего LoginViewModel, и в тесте, когда я использую конструктор LoginViewModel для создания нового экземпляра, я получаю ошибку NullReferenceException. Код компилируется и запускается (т.е. когда я запускаю программу, которую показывает LoginView, и работает с LoginViewModel для создания правильного поведения и т. Д.), Но по какой-то причине происходит сбой UnitTest.
это конструктор:
public LoginViewModel(ILoginServices loginServices,IDialogService dialogServices)
{
InitializeFields();
_loginServices = loginServices;
_dialogService = dialogServices;
DomainList = _loginServices.GetDomainListing();
}
Я смоделировал зависимости следующим образом:
Mock<ILoginServices> moq = new Mock<ILoginServices>();
moq.Setup(log =>
log.LoginUser(It.IsAny<string>(),
It.IsAny<string>(),
It.IsAny<string>()))
.Callback<string, string, string>((i, j, k) => CheckArgs(i, j, k));
moq.Setup(log2 =>
log2.GetDomainListing()).Returns(new List<string> { "Domain" });
Mock<IDialogService> moq2 = new Mock<IDialogService>();
- Я также пытался вставить реальные службы в качестве параметров.
- Я проверил, что макеты работают, и объекты эти макеты
возврат не нулевой.
- Я закомментировал весь код в конструкторе.
Я попытался вставить строку
LoginViewModel test = new LoginViewModel (_fakeLoginService, _fakeDialogService);
перед вызовом конструктора (чтобы увидеть, имеет ли это отношение к исходной локальной переменной, расположенной или чем-то еще), и вместо этого эта строка вылетела.
Из всего, что я могу видеть, это должен быть конструктор (но не код, который я написал внутри него), и что это связано исключительно с NUnit / Moq, так как мой код все еще компилируется и работает нормально.
Я понятия не имею, парни, кто-нибудь может указать мне правильное направление?
[Редактировать]
Хорошо, я выполнил код, и в этой строке кода появляется ошибка:
ImageSource = (ImageSource)Application.Current.FindResource(_imageName);
Этот код отправляется в ImageDictionary и получает ссылку на изображение для кнопки отмены в WindowViewModel (которую наследует мой LoginViewModel).
Мои предположения относительно того, почему он работает при нормальном запуске приложения, а не при тестировании:
1) Поскольку я запускаю программный код через NUnit, объект Application.Current не получает назначенное свойство / нет объекта Application.Current, который нужно получить.
**or**
2) Что-то, что связано с тем, что, поскольку программный код запускается в NUnit, у кода нет доступа к / невозможно разрешить ImageDictionary для поиска изображения.
Я сильнее склоняюсь к первой гипотезе, но пока еще не уверен на 100%, и у меня возникают проблемы с поиском значений Application.Current во время выполнения, потому что, когда я перемещаю курсор над закройте всплывающую подсказку, отображающую детали объекта, который не появляется.
Мой новый вопрос: имеет ли это смысл? Ребята, вы знаете, существует ли / доступен объект Application.Current при запуске проекта тестирования через NUnit?
Любая помощь будет оценена.