2017-01-30 30 views
1

這個代碼看看不工作:起訂量返回方法如預期

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:與起訂量的ResturnsAsync

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

回答

1

我換成It.IsAny<string>()通過It.IsAny<RedisKey>()

0

嘗試使用異步/等待行使測試,而不是使用阻塞調用.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(新的異常()) '我也沒有例外... – Leonardo

+0

我設法讓它工作,替換設置'It.IsAny ()',爲「It.IsAny ()」... – Leonardo