Невозможно выполнить настройку насмешки - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь использовать nunit вместе с модульным тестированием. Однако я испытываю эту ошибку:

Moq.MockException: следующие настройки не были сопоставлены: User m => m.encrptPassword(It.IsAny<String>(), It.IsAny<String>())

Ниже приведен фрагмент кода, в котором возникают проблемы:

private User _User;
Mock<User> mockUser;

[SetUp]
public void init()
{
    mockUser = new Mock<User>();
    _User = new User();
}

[Test]
[TestCase("1","admin","??????_????k0O???qr#??%szq??` ?j???????D>?????????Lvz??BP")]
public void encryptPasswordTest(string userID, string password, string output)
{

    mockUser.Setup(m => m.encryptPassword(It.IsAny<string>(), It.IsAny<string>())).Returns(() => output);
    string result = _User.encryptPassword(userID, password);
    Assert.That(result.Equals(output));

    mockUser.VerifyAll();
}

Ниже приведен метод, который я пытаюсь высмеять

public virtual string encryptPassword(string userID, string password) {
    string hashed = "";
    HashAlgorithm sha256 = new SHA256CryptoServiceProvider();
    string salted = userID + password;
    byte[] result = sha256.ComputeHash(Encoding.ASCII.GetBytes(salted));
    hashed = Encoding.ASCII.GetString(result);
    return hashed;
}

1 Ответ

0 голосов
/ 05 июля 2018

В вашем случае вам не нужны никакие насмешки, вы просто должны проверить вывод функций:

[Test]
[TestCase("1","admin","??????_????k0O???qr#??%szq??` ?j???????D>?????????Lvz??BP")]
public void encryptPasswordTest(string userID, string password, string output)
{ 
    string result = _User.encryptPassword(userID, password);
    Assert.That(result.Equals(output));
}

Вам понадобится издеваться, если вам нужно проверить свою логику в зависимости от вывода другого компонента. Например. у вас есть

public interface IEncrypter
{
    string encryptPassword(string userID, string password);
}

и введите его в класс пользователя:

public User(IEncrypter encrypter) { this.encrypter = encrypter; }

Тогда вы бы высмеяли это:

var mock = new Mock<IEncrypter>();
mock.Setup(m => m.encryptPassword(It.IsAny<string>(), It.IsAny<string>())).Returns(() => output);
var user = new User(mock.Object);
...