public void CanExecute_WhenCallingNotExecuting_ShouldReturnFalse(
            SingleExecutionCanExecuteStrategy <object> sut)
        {
            //arrange
            sut.NotifyExecuting(null);
            sut.NotifyNotExecuting(null);

            //act
            var actual = sut.CanExecute(null);

            //assert
            actual.Should().BeTrue();
        }
        public void CanExecute_WhenCallingWithDifferentParameters_ShouldReturnFalse(
            SingleExecutionCanExecuteStrategy <object> sut,
            object parameter1,
            object parameter2)
        {
            //arrange
            sut.NotifyExecuting(null);
            sut.NotifyNotExecuting(parameter1);

            //act
            var actual = sut.CanExecute(parameter2);

            //assert
            actual.Should().BeTrue();
        }
        public void NotifyNotExecuting_WithNullParameter_ShouldRaiseCanExecuteChanged(
            bool isExecuting,
            [Frozen] TestScheduler scheduler,
            SingleExecutionCanExecuteStrategy <object> sut)
        {
            //arrange
            var observer = scheduler.CreateObserver <Unit>();

            sut.CanExecuteChanged.Subscribe(observer);

            //act
            sut.NotifyNotExecuting(null);

            //assert
            observer.Values().Should().HaveCount(1);
        }
		public void CanExecute_WhenCallingWithDifferentParameters_ShouldReturnFalse(
		  SingleExecutionCanExecuteStrategy<object> sut,
			object parameter1,
			object parameter2)
		{
			//arrange
			sut.NotifyExecuting(null);
			sut.NotifyNotExecuting(parameter1);

			//act
			var actual = sut.CanExecute(parameter2);

			//assert
			actual.Should().BeTrue();
		}
		public void CanExecute_WhenCallingNotExecuting_ShouldReturnFalse(
		  SingleExecutionCanExecuteStrategy<object> sut)
		{
			//arrange
			sut.NotifyExecuting(null);
			sut.NotifyNotExecuting(null);

			//act
			var actual = sut.CanExecute(null);

			//assert
			actual.Should().BeTrue();
		}
		public void NotifyNotExecuting_WithParameter_ShouldRaiseCanExecuteChanged(
			bool isExecuting,
			[Frozen]TestScheduler scheduler,
		  SingleExecutionCanExecuteStrategy<object> sut,
			object parameter)
		{
			//arrange
			var observer = scheduler.CreateObserver<Unit>();
			sut.CanExecuteChanged.Subscribe(observer);

			//act
			sut.NotifyNotExecuting(parameter);

			//assert
			observer.Values().Should().HaveCount(1);
		}