Sru*_*ana 3 c# unit-testing moq asp.net-core asp.net-core-mvc-2.0
我正在使用moq框架编写单元测试.我在基本控制器中调用一个方法setsession()
来设置会话使用SetString("userdata",object)
,我还有一个方法getsession()
可以获得会话.
var sessionMock = new Mock<ISession>();
sessionMock.Setup(s => s.GetString("userdata")).Returns(Object);--failing
sessionMock.Setup(s => s.SetString("userdata",object));--failing
Run Code Online (Sandbox Code Playgroud)
我得到的错误s.GetString
和s.SetString
.
作为GetString
和SetString
是扩展方法可能是我需要使用另一种方式来处理它.
你能帮我么?
根据ISession Extensions源代码 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;
}
Run Code Online (Sandbox Code Playgroud)
您将需要模拟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);
Run Code Online (Sandbox Code Playgroud)