嗨,有可能像这样moq。我正在使用MVC模式,我正在测试我的控制器层。我已经在我的服务层测试了方法getListForId,所以我可以相信它会返回正确的值。
public List<object> getListForID(int id)
我像这样使用它
if(true)
{
getListForID(1).Where(a => a.Id == objectB.Id)
}
else
{
getListForID(1)
}
即使在真实路径中存在某个位置,测试每条路径的代码也是相同的。
是否可以验证是否使用where子句调用了该方法? 这样做有什么价值吗?
答案 0 :(得分:3)
您应该测试行为,而不是实现。如果您已经测试了服务层,那么对于控制器测试,您应该模拟服务层,并使getById
返回具有可能值的对象列表,然后测试该列表是否已正确过滤:
(伪代码如下)
// arrange
var serviceOutput = new List<MyEntity>
{
new MyEntity{Id = 1},
new MyEntity{Id = 2}
}
var mockService = new Mock<IMyService>();
mockService.Setup(s=>s.GetById(1)).Returns(serviceOutput);
var lookupObject = new MyEntity{Id = 1};
var testController = new MyController(mockService.Object);
// act
var result = controller.FindSimilar(lookupObject);
// assert
result.Should().Have.Count().EqualTo(1);
result[0].Should().Be.SameInstanceAs(serviceOutput[0]);