2017-01-30 4 views
1

Посмотрите на этот код:Moq Возвращает метод не работает, как ожидалось

var thirdLevelCacheMock = new Mock<IDatabase>(); 
RedisValue val = "not empty or null string"; 
thirdLevelCacheMock.Setup(m => m.StringGetAsync(It.IsAny<string>(), It.IsAny<CommandFlags>())).Returns(Task.FromResult(val)); 

CachingInfrastructure caching = new CachingInfrastructure(); 
caching._thirdLevelCache = thirdLevelCacheMock.Object; 

var operation = caching.GetKeyAsync("bla", CacheLevel.Any); 

Assert.DoesNotThrow(() => { operation.Wait(); }); 
Assert.IsNotNull(operation.Result); 

Как вы можете заметить, я устанавливаю возвращение StringGetAsync к простой не пустой/пустая строка.

Моя проблема заключается в том, что внутри caching.GetKeyAsync вызов этого метода возвращает нулевой результат. Что я здесь делаю неправильно?

Код для GetKeyAsync:

result = _thirdLevelCache.StringGetAsync(key, CommandFlags.None).ContinueWith((prev) => 
     { 
      string res = null; 
      if (!prev.Result.IsNull) 
      { 
       res = prev.Result.ToString(); 
      } 
      return res as object; 
     }); 

ответ

0

Попробуйте использовать асинхра/ждать с Moq-х ResturnsAsync осуществлять проверку вместо того, чтобы использовать блокирующий вызов .Wait().

public async Task TestMthod() { 
    //Arrange 
    var expected = "not empty or null string"; 
    var thirdLevelCacheMock = new Mock<IDatabase>(); 
    RedisValue val = expected; 
    thirdLevelCacheMock 
     .Setup(m => m.StringGetAsync(It.IsAny<string>(), It.IsAny<CommandFlags>())) 
     .ReturnsAsync(val); 

    var caching = new CachingInfrastructure(); 
    caching._thirdLevelCache = thirdLevelCacheMock.Object; 

    //Act 
    var actual = await caching.GetKeyAsync("bla", CacheLevel.Any); 

    //Assert 
    Assert.IsNotNull(actual); 
    Assert.AreEqual(expected, actual); 
} 
+0

извините за задержку, но это не сработало ... – Leonardo

+0

смешно, если я изменить 'ReturnsAsync (VAL)' 'для ThrowsAsync (новый Exception()) 'Я тоже не получаю исключение ... – Leonardo

+0

Мне удалось заставить его работать, заменяя установку' It.IsAny () ', для" It.IsAny () "... – Leonardo

Смежные вопросы