2017-01-30 3 views
1

an diesem Code Werfen Sie einen Blick:Moq Kosten Methode nicht wie erwartet funktioniert

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); 

Wie Sie sehen können, ich bin die Rückkehr von StringGetAsync zu einem einfachen nicht leer/Null-String zu setzen.

Mein Problem ist, dass innerhalb der caching.GetKeyAsync der Aufruf dieser Methode ein Null-Ergebnis zurückgibt. Was mache ich hier falsch?

-Code für GetKeyAsync:

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

Antwort

1

I ersetzt It.IsAny<string>() von It.IsAny<RedisKey>()

0

Versuchen Asynchron mit/warten mit Moq des ResturnsAsync.Wait() den Test anstelle der Verwendung des blockierenden Aufruf zu trainieren.

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

sorry für die Verspätung, aber es hat nicht funktioniert ... – Leonardo

+0

lustig, wenn ich die 'ReturnsAsync (val) ändern' für 'ThrowsAsync (new Exception()) 'Ich bekomme auch keine Ausnahme ... – Leonardo

+0

Ich schaffte es, es funktioniert das Ersetzen der Setup' It.IsAny () ', für" It.IsAny () "... – Leonardo

Verwandte Themen