Unit testing 具有复杂参数的Moq设置方法
我正在尝试设置此界面的模拟:Unit testing 具有复杂参数的Moq设置方法,unit-testing,moq,Unit Testing,Moq,我正在尝试设置此界面的模拟: public interface IAuthenticatedRequestService { HttpClient CreateHttpClientForJwt(Func<HttpResponseMessage, bool> isUnauthenticated, int timeoutSeconds); HttpClient CreateHttpClientForAccessToken(Func<Http
public interface IAuthenticatedRequestService
{
HttpClient CreateHttpClientForJwt(Func<HttpResponseMessage, bool> isUnauthenticated, int timeoutSeconds);
HttpClient CreateHttpClientForAccessToken(Func<HttpResponseMessage, bool> isUnauthenticated, int timeoutSeconds);
}
这是我的单元测试,它设置了模拟:
[Test]
public async void TestIsLoggedInIsTrue()
{
//Arrange
var authenticatedRequestService = new Mock<IAuthenticatedRequestService>();
authenticatedRequestService.Setup(foo => foo.CreateHttpClientForAccessToken((It.IsAny<Func <HttpResponseMessage, bool>>())
, 0
)).Returns(new HttpClient());
var platformOperationProvider = new Mock<IPlatformOperationProvider>();
platformOperationProvider.Setup(foo => foo.CreateHttpClient(1)).Returns(new HttpClient());
Mvx.RegisterSingleton<IPlatformOperationProvider>(platformOperationProvider.Object);
Mvx.RegisterSingleton<IAuthenticatedRequestService>(authenticatedRequestService.Object);
var loggedInProvider = new LoggedInProvider(
new Mock<ISecuredSettings>().Object,
new Mock<ILoggingService>().Object
);
//Act
await loggedInProvider.SetUserAndToken(
new User(),
new ApiAccessInfo("refresh token", "access token", "jwt")
);
//Assert
Assert.IsTrue(loggedInProvider.IsLoggedIn);
}
编辑:要清楚,我需要更正的是这行代码:
authenticatedRequestService.Setup(foo => foo.CreateHttpClientForAccessToken((It.IsAny<Func <HttpResponseMessage, bool>>())
, 0
)).Returns(new HttpClient());
async Task<ServiceResponse> UpdateUserDetails()
{
// Have to late-resolve this otherwise we end up with a dependency loop
var service = Mvx.Resolve<IAuthenticatedRequestService>();
try
{
var client = service.CreateHttpClientForAccessToken(x => x.StatusCode == HttpStatusCode.Unauthorized, CoreConstants.TimeoutMyDetails);
// here is the problem, the client is null after this line of code.
var user = _user;
Mvx.RegisterSingleton<IAuthenticatedRequestService>(authenticatedRequestService.Object);
var service = Mvx.Resolve<IAuthenticatedRequestService>();
我发现这不是最低起订量问题。MvvmCross未注册要正确解析的对象。
此行不起作用:
authenticatedRequestService.Setup(foo => foo.CreateHttpClientForAccessToken((It.IsAny<Func <HttpResponseMessage, bool>>())
, 0
)).Returns(new HttpClient());
async Task<ServiceResponse> UpdateUserDetails()
{
// Have to late-resolve this otherwise we end up with a dependency loop
var service = Mvx.Resolve<IAuthenticatedRequestService>();
try
{
var client = service.CreateHttpClientForAccessToken(x => x.StatusCode == HttpStatusCode.Unauthorized, CoreConstants.TimeoutMyDetails);
// here is the problem, the client is null after this line of code.
var user = _user;
Mvx.RegisterSingleton<IAuthenticatedRequestService>(authenticatedRequestService.Object);
var service = Mvx.Resolve<IAuthenticatedRequestService>();
以下是解析AuthenticatedRequestService
async Task<ServiceResponse> UpdateUserDetails()
{
// Have to late-resolve this otherwise we end up with a dependency loop
var service = Mvx.Resolve<IAuthenticatedRequestService>();
try
{
var client = service.CreateHttpClientForAccessToken(x => x.StatusCode == HttpStatusCode.Unauthorized, CoreConstants.TimeoutMyDetails);
var user = _user;
var str = await client.GetStringAsync(new Uri(user.IdUrl));
var newUser = JsonConvert.DeserializeObject<User.Json>(str);
var token = _token;
if (token != null)
异步任务UpdateUserDetails()
{
//我们必须延迟解决这个问题,否则我们最终会导致依赖循环
var service=Mvx.Resolve();
尝试
{
var client=service.CreateHttpClientForAccessToken(x=>x.StatusCode==HttpStatusCode.Unauthorized,CoreContents.TimeoutMyDetails);
var user=\u user;
var str=await client.GetStringAsync(新Uri(user.IdUrl));
var newUser=JsonConvert.DeserializeObject(str);
var-token=_-token;
if(令牌!=null)
您可以断言实例loggedInProvider(loggedInProvider类型)的属性但是,我无法在您的示例中使用该类的任何声明。您能提供一个编译示例吗?@flo原始单元测试中实例化了一个LoggedInProvider,但是我已经使用通过的单元测试中的LoggedInProvider粘贴了一些代码。我希望在哪里,这可能能够缩短您的示例以缩小问题向下:-)