public void GenerateCertificate(string appName, uint keySize, uint days, string organization) { // Arrange var projectDirectory = appName; const string certificateFolder = "certificate-folder"; const string certificateConfigPath = "certificate-config-file"; const string privateKeyPEM = "private-key-pem"; _fileSystemMock.Setup(x => x.CombinePaths(projectDirectory, Constants.DirectoryName.Certificates)).Returns(certificateFolder); _fileSystemMock.Setup(x => x.CombinePaths(certificateFolder, Constants.FileName.CertificateConfig)).Returns(certificateConfigPath); _fileSystemMock.Setup(x => x.CombinePaths(certificateFolder, Constants.FileName.PrivateKeyPEM)).Returns(privateKeyPEM); _fileSystemMock.Setup(x => x.LoadTemplateFile(Resources.Resources.OpenSSLConfigTemplateFileName)).Returns(TemplateConfig); // Act _objectUnderTest.Generate(appName, string.Empty, keySize, days, organization); // Assert _fileSystemMock.Verify(fs => fs.CreateDirectory(certificateFolder), Times.Once); _fileSystemMock.Verify(fs => fs.CreateFile(certificateConfigPath, GetExpectedConfig(keySize, appName, organization)), Times.Once); _fileSystemMock.Verify(fs => fs.CallExecutable(Constants.ExecutableName.OpenSSL, certificateFolder, string.Format(Constants.ExternalExecutableArguments.OpenSSL, string.Empty, days)), Times.Once); _fileSystemMock.Verify(fs => fs.CallExecutable(Constants.ExecutableName.OpenSSL, certificateFolder, string.Format(Constants.ExternalExecutableArguments.OpenSSLConvertKeyFromPEM, Constants.FileName.PrivateKeyPEM, Constants.FileName.PrivateKeyDER)), Times.Once); _fileSystemMock.Verify(fs => fs.LoadTemplateFile(Resources.Resources.OpenSSLConfigTemplateFileName), Times.Once); _fileSystemMock.Verify(fs => fs.DeleteFile(privateKeyPEM), Times.Once); _loggerListenerMock.Verify(listener => listener.Info(string.Format(LoggingText.CertificateGeneratorSuccess, projectDirectory))); }