protected override void OnExit(ExitEventArgs e) { _notifyIcon.Dispose(); _timerViewModel.Dispose(); _timerStore.Dispose(); base.OnExit(e); }
public void Test_TimerViewModel_HappyPath() { //arrange string startAt = "02"; string initialText = ""; string stoppedText = ""; string afterTick = ""; string finalText = ""; string afterReset = ""; Mock <IUserInterface> ui = new Mock <IUserInterface>(); Mock <ILogger> logger = new Mock <ILogger>(); Mock <ILoopSoundPlayer> player = new Mock <ILoopSoundPlayer>(); var config = new ConfigurationValues(); var timer = CreateDispatcherTimer(config); TimerClock clock = new TimerClock(config, logger.Object, timer.Object); TimerViewModel timervm = new TimerViewModel(ui.Object, player.Object, clock, config, logger.Object); //act timervm.Text = startAt; MethodInfo dynMethod = timervm.GetType().GetMethod("Ui_UiEventHappened", BindingFlags.NonPublic | BindingFlags.Instance); dynMethod.Invoke(timervm, new object[] { new object(), new UIEventArgs(UIEventArgs.UIEventType.BtnStartClicked) }); initialText = timervm.Text; timer.Raise(x => x.Tick += null, this, new EventArgs() { }); afterTick = timervm.Text; dynMethod.Invoke(timervm, new object[] { new object(), new UIEventArgs(UIEventArgs.UIEventType.BtnStartClicked) }); timer.Raise(x => x.Tick += null, this, new EventArgs() { }); stoppedText = timervm.Text; dynMethod.Invoke(timervm, new object[] { new object(), new UIEventArgs(UIEventArgs.UIEventType.BtnStartClicked) }); timer.Raise(x => x.Tick += null, this, new EventArgs() { }); finalText = timervm.Text; dynMethod.Invoke(timervm, new object[] { new object(), new UIEventArgs(UIEventArgs.UIEventType.BtnResetClicked) }); afterReset = timervm.Text; timervm.Dispose(); //assert Assert.Equal("00:00:02", initialText); Assert.Equal("00:00:01", afterTick); Assert.Equal("00:00:01", stoppedText); Assert.Equal("00:00:00", finalText); Assert.Equal("00:00:01", afterReset); logger.Verify(x => x.LogError(It.IsAny <string>()), Times.Never); logger.Verify(x => x.LogError(It.IsAny <string>(), It.IsAny <Exception>()), Times.Never); player.Verify(x => x.Play(It.IsAny <int>()), Times.Once); }