public void DisposeWillNotFailIfHookWasNeverInstalled()
        {
            // Arrange
            var dummyLowLevelMouseWindowsHook = new DummyLowLevelMouseWindowsHook((identifier, kbdllhookstruct) => { });

            // Act, Assert
            dummyLowLevelMouseWindowsHook.Invoking(h => h.Dispose()).Should().NotThrow <ObjectDisposedException>();
        }
        public void DisposeWillNotFailIfHookWasAlreadyDisposed()
        {
            // Arrange
            DummyLowLevelMouseWindowsHook dummyLowLevelMouseWindowsHook = null;

            using (dummyLowLevelMouseWindowsHook = new DummyLowLevelMouseWindowsHook((identifier, kbdllhookstruct) => { }))
            {
                dummyLowLevelMouseWindowsHook.Install();
            }

            // Act, Assert
            dummyLowLevelMouseWindowsHook.Invoking(h => h.Dispose()).Should().NotThrow <ObjectDisposedException>();
        }
        public void UninstallWillFailIfHookAlreadyUninstalled()
        {
            // Arrange
            var dummyLowLevelMouseWindowsHook = new DummyLowLevelMouseWindowsHook((identifier, kbdllhookstruct) => { });

            dummyLowLevelMouseWindowsHook.Install();

            // Act
            dummyLowLevelMouseWindowsHook.Uninstall();

            // Assert
            dummyLowLevelMouseWindowsHook.Invoking(h => h.Uninstall()).Should().Throw <ObjectDisposedException>();
        }