模拟 IAuthSession.GetOAuthTokens
Mock IAuthSession.GetOAuthTokens
我有一个使用以下代码的服务栈服务
public MyResponse Get(MyRequest request){
var authSession = GetSession();
var tokens = authSession.GetOAuthTokens("somekey");
var jwt = JwtPayload.Deserialize(tokens.AccessTokenSecret);
var clientId = jwt.Claims.First(x => x.Type == "client_id").Value;
//...
我正在围绕此服务功能创建一个单元测试,但 GetOAuthTokens 似乎是一个静态扩展方法,不能被 Moq(或该示例的任何 Mocking 框架)模拟。
这是我当前的测试函数
[Test]
public void Get_ShouldReturnListOfApplications()
{
using (new BasicAppHost(typeof(ApplicationService).Assembly).Init())
{
var req = new MockHttpRequest();
req.Items[SessionFeature.RequestItemsSessionKey] =
new AuthUserSession
{
UserName = "Mocked",
RequestTokenSecret="test",
ProviderOAuthAccess = new System.Collections.Generic.List<IAuthTokens>() { MockTokens.Object }
};
using (var service = HostContext.ResolveService<ApplicationService>(req))
{
service.Client = MockServiceClient.Object;
service.Settings = MockSettingsProvider.Object;
var response = service.Get(TestApplicationRequest);
}
}
}
有没有办法模拟 "GetOAuthTokens" 函数的结果?
下面是 GetOAuthTokens() extension method 的实现:
public static IAuthTokens GetOAuthTokens(this IAuthSession session, string provider)
{
foreach (var tokens in session.ProviderOAuthAccess)
{
if (string.Compare(tokens.Provider, provider, StringComparison.InvariantCultureIgnoreCase) == 0)
return tokens;
}
return null;
}
所以它应该返回 session.ProviderOAuthAccess
中的所有标记,其中 provider == "somekey"
我有一个使用以下代码的服务栈服务
public MyResponse Get(MyRequest request){
var authSession = GetSession();
var tokens = authSession.GetOAuthTokens("somekey");
var jwt = JwtPayload.Deserialize(tokens.AccessTokenSecret);
var clientId = jwt.Claims.First(x => x.Type == "client_id").Value;
//...
我正在围绕此服务功能创建一个单元测试,但 GetOAuthTokens 似乎是一个静态扩展方法,不能被 Moq(或该示例的任何 Mocking 框架)模拟。
这是我当前的测试函数
[Test]
public void Get_ShouldReturnListOfApplications()
{
using (new BasicAppHost(typeof(ApplicationService).Assembly).Init())
{
var req = new MockHttpRequest();
req.Items[SessionFeature.RequestItemsSessionKey] =
new AuthUserSession
{
UserName = "Mocked",
RequestTokenSecret="test",
ProviderOAuthAccess = new System.Collections.Generic.List<IAuthTokens>() { MockTokens.Object }
};
using (var service = HostContext.ResolveService<ApplicationService>(req))
{
service.Client = MockServiceClient.Object;
service.Settings = MockSettingsProvider.Object;
var response = service.Get(TestApplicationRequest);
}
}
}
有没有办法模拟 "GetOAuthTokens" 函数的结果?
下面是 GetOAuthTokens() extension method 的实现:
public static IAuthTokens GetOAuthTokens(this IAuthSession session, string provider)
{
foreach (var tokens in session.ProviderOAuthAccess)
{
if (string.Compare(tokens.Provider, provider, StringComparison.InvariantCultureIgnoreCase) == 0)
return tokens;
}
return null;
}
所以它应该返回 session.ProviderOAuthAccess
中的所有标记,其中 provider == "somekey"