gpt4 book ai didi

c# - 比较 LINQ-to-SQL 中的 byte[] 和使用模拟的单元测试

转载 作者:太空狗 更新时间:2023-10-29 20:35:20 24 4
gpt4 key购买 nike

我有以下方法:

User IDataContext.AuthenticateUser(string userName, string password)
{
byte[] hash = PasswordHasher.HashPassword(userName, password);

var query =
from e in mContext.GetTable<User>()
where e.Email == userName && e.Password == hash
select e;

return query.FirstOrDefault();
}

mContextSystem.Data.Linq.DataContext 时,一切正常。但是,当 mContext 在我的联合测试期间是内存中的模拟时,e.Passwordhash 之间的比较总是返回 false

如果我将此比较重写为 e.Password.SequenceEqual(hash),那么我的单元测试将会通过,但是当我与 LinqToSql 对话时出现异常。 (System.NotSupportedException:不支持查询运算符“SequenceEqual”。)

有没有一种方法可以让我编写此查询来满足我使用内存中模拟的单元测试以及使用 LinqToSql 的生产组件?

最佳答案

这很有趣。我想不出一种方便的方法来拦截 equals 而不会破坏一切,但是:用户名是唯一的吗?您可以只是在 LINQ 中包含用户名条件,然后在常规 c# 中检查散列。就传输的数据而言,传入和取出数据之间几乎没有区别,特别是如果我们针对成功案例进行优化(在这种情况下,这减少了 IO 要求)。

注意:如果您这样做,返回“未找到”和“不匹配”的相同结果。

因为 byte[] 比较不再依赖于 LINQ-to-SQL 的特殊处理,它现在应该可以在您的模拟中正常工作。

var user = (by name).SingleOrDefault();
if(user==null) #fail
bool hashMatch = /* compare array */
if (!hashMatch) #fail
return user;

关于c# - 比较 LINQ-to-SQL 中的 byte[] 和使用模拟的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com