У нас есть много тестов CanExecute для различных команд в нашем проекте.Все тесты прошли правильно, когда мы используем тестирование Visual Studio или AxoCover.
Мы пытались добавить некоторую предыдущую инициализацию объекта, прежде чем выполнить 'CanExecute', и иногда это работало (или мы думали, что).
testedViewModel.Object.InEditMode = inEditMode;
У меня есть тест:
[TestCase(true, true, TestName = "Command_InEditMode_CanExecute")]
[TestCase(false, false, TestName = "Command_NotInEditMode_CannotExecute")]
public void CommandCanExecute(bool inEditMode, bool expectedResult)
{
var testedViewModel =
new Mock<SomeViewModel>(inEditMode)
{
CallBase = true
};
testedViewModel.Setup(x => x.InEditMode).Returns(inEditMode);
Assert.AreEqual(expectedResult, testedViewModel.Object.Command.CanExecute(null));
}
Иногда (НЕ ВСЕГДА), когда Jenkins выполняет модульные тесты сборки и запуска, некоторые из них могут выполнить тесты с ошибкой:
MESSAGE:
Expected: True
But was: False
+++++++++++++++++++
STACK TRACE:
at Project.CommandCanExecute(Boolean inEditMode, Boolean expectedResult)
проблема в том, что это происходит только с Дженкинсом, и это очень недетерминировано.
РЕДАКТИРОВАТЬ:
Хорошо, еще одна вещь, о которой нужно подумать.Свойство InEditMode помещается в базовый родительский класс SomeModelView.
И я слил код для вас в примере.
public BaseViewModel
{
public virtual bool InEditMode {get; set;}
}
public SomeViewModel : BaseViewModel
{
public SomeViewModel () : base ()
{
}
public ICommand Command { get; set; }
public virtual void RegisterCommands()
{
Command = new RelayCommand(/*Do something*/, () => InEditMode);
}
}
И мы думаем, что это может быть связано, что объект думает, что этоинициализируется перед инициализацией базового класса.Но это очень трудно проверить с Дженкинсом.