Как издеваться над Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.CryptographyManager - PullRequest
0 голосов
/ 31 октября 2018

Я собираю небольшой пакет NuGet, используя стандартное ядро ​​dotnet.

NuGet проанализирует зашифрованный пакет SAML.

Наша организация использует библиотеку Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.

Чтобы разрешить разделение, я написал код для принятия экземпляра CryptographyManager в конструкторе одного из классов.

Я пытаюсь написать модульные тесты, которые будут проверять расшифровку зашифрованной строки, но не знаю, как Moq CryptographyManager.

Проект модульного тестирования является проектом ядра DotNet.

Я конкретно, в NuGet, звоню:

var eb = Convert.FromBase64String(_xmlString);
// Decryption occurs here
var db = _cryptographyManager.DecryptSymmetric("RijndaelManaged", eb);
_xmlString = Encoding.Unicode.GetString(db);

Кто-нибудь может предложить указатели на то, как это может быть проверено модулем? Я бы предложил немного кода, хотя понятия не имею, с чего начать ... В моем модульном тесте отсутствует большой кусок:

    [TestMethod]
    public void TestThatEmployeeInformationEncryptedIsParsedCorrect()
    {

        // arrange
        // NO IDEA WHAT TO DO HERE //
        CryptographyManager cryptographyManager = null;   

        EmployeeInformation expected = new EmployeeInformation
        {
            FirstName = "Test",
            LastName = "Case",
            EmployeeNumber = "0001111111",
            LanguageCode = "en",
            CountryCode = "CA",
            RequestedPage = string.Empty,
            PositionId = "POS9999999",
            Role = "EKR"
        };

        IParser p = new XMLParser(_encryptedGoodXml, cryptographyManager);

        // act
        EmployeeInformation result = p.EmployeeInformation;

        // assert
        result.Should().BeEquivalentTo(expected);
    }

1 Ответ

0 голосов
/ 31 октября 2018

Как я вижу из документации, CryptographyManager - это класс abstract, поэтому его можно очень легко смоделировать, например:

var mockCryptoManager = new Mock<CryptographyManager>();

После этого вам нужно настроить вызов, который ваш фактический код делает на нем:

mockCryptoManager
    .Setup(cm => cm.DecryptSymmetric("RijndaelManaged", It.IsAny<byte[]>()))
    .Returns(/* Here you have to put the value you want the mock return with */);

И тогда вы можете использовать свой макет, как:

CryptographyManager cryptographyManager = mockCryptoManager.Object;
...