无法执行模拟设置



我正在尝试利用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;
}

你不需要任何模拟,你只需要检查函数输出:

[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);

最新更新