我正在使用最小起订量框架编写单元测试。我在基本 Controller setsession()
中调用一个方法,它将使用 SetString("userdata",object)
设置 session ,我还有一个方法 getsession()
这将获得 session 。
var sessionMock = new Mock<ISession>();
sessionMock.Setup(s => s.GetString("userdata")).Returns(Object);--failing
sessionMock.Setup(s => s.SetString("userdata",object));--failing
我在 s.GetString
和 s.SetString
中收到错误。
由于 GetString
和 SetString
是扩展方法,可能我需要使用另一种方式来处理它。
你能帮帮我吗?
最佳答案
根据 ISession Extensions source code GetString
和SetString
是扩展方法
public static void SetString(this ISession session, string key, string value)
{
session.Set(key, Encoding.UTF8.GetBytes(value));
}
public static string GetString(this ISession session, string key)
{
var data = session.Get(key);
if (data == null)
{
return null;
}
return Encoding.UTF8.GetString(data);
}
public static byte[] Get(this ISession session, string key)
{
byte[] value = null;
session.TryGetValue(key, out value);
return value;
}
你需要模拟 ISession.Set
和 ISession.TryGetValue
为了让扩展方法按预期执行。
//Arrange
var sessionMock = new Mock<ISession>();
var key = "userdata";
var value = new byte[0];
sessionMock.Setup(_ => _.Set(key, It.IsAny<byte[]>()))
.Callback<string, byte[]>((k,v) => value = v);
sessionMock.Setup(_ => _.TryGetValue(key, out value))
.Returns(true);
关于c# - 如何在 asp net core 中模拟 session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47203333/