2016-11-15 75 views
1

使用Callback尝试从MOQ方法获取参数值时遇到问题。在lambda表达式中未命中Moq回调方法

// Test 1 - can get parameters in moq method callback - OK 
var test = _myService.GetValues(9, 9).ToList(); 

// Test 2 - can not drill into moq method callback - KO 
var test2 = mylist 
.Select(x => _myService.GetValues(x.p1, x.p2).ToList()); 

// with: 
var l1 = new list<int>(); 
var _myService = new Mock<MyService>(); 

_myService 
    .Setup(x => x.GetValues(It.IsAny<int>(), It.IsAny<int>())) 
    .Returns(something) 
    .Callback<int, int>((a, b) => l1.Add(a)); 

有人可以解释我为什么吗?

+0

是ü得到什么错误?什么是事物和mylist? – barakcaf

+0

提供一个能够再现问题的[mcve],其他明智的问题仍然不清楚,将会被关闭。 – Nkosi

回答

3

除非枚举Select查询,否则不会执行lambda表达式。这就是为什么它看起来不工作。

枚举select并且所有内容都应按预期工作。

var test2 = mylist 
.Select(x => _myService.GetValues(x.p1, x.p2).ToList()) 
.ToList(); 

OR

var test2 = mylist 
.Select(x => _myService.GetValues(x.p1, x.p2).ToList()); 
foreach(var x in test2) { ... }