public async Task WhenCallingCanRun_ShouldOnlyCallExternalProcessOnce()
        {
            var nuKeeperLogger  = Substitute.For <INuKeeperLogger>();
            var externalProcess = Substitute.For <IExternalProcess>();

            externalProcess.Run("", "mono", "--version", false).
            Returns(new ProcessOutput("", "", 0));

            var monoExecutor = new MonoExecutor(nuKeeperLogger, externalProcess);

            await monoExecutor.CanRun();

            await monoExecutor.CanRun();

            await monoExecutor.CanRun();

            await externalProcess.Received(1).Run(
                "",
                "mono",
                "--version",
                false);
        }
        public async Task WhenCallingCanRun_ShouldCheckExternalProcessResult(int exitCode, bool expectedCanExecute)
        {
            var nuKeeperLogger  = Substitute.For <INuKeeperLogger>();
            var externalProcess = Substitute.For <IExternalProcess>();

            externalProcess.Run("", "mono", "--version", false).
            Returns(new ProcessOutput("", "", exitCode));

            var monoExecutor = new MonoExecutor(nuKeeperLogger, externalProcess);

            var canRun = await monoExecutor.CanRun();

            Assert.AreEqual(expectedCanExecute, canRun);
        }