你能否在使用Nunit时修剪Where子句?

时间:2013-08-06 12:57:19

标签: c# nunit moq

嗨,有可能像这样moq。我正在使用MVC模式,我正在测试我的控制器层。我已经在我的服务层测试了方法getListForId,所以我可以相信它会返回正确的值。

public List<object> getListForID(int id)

我像这样使用它

if(true)
{
    getListForID(1).Where(a => a.Id == objectB.Id)
}
else
{
    getListForID(1)
}

即使在真实路径中存在某个位置,测试每条路径的代码也是相同的。

是否可以验证是否使用where子句调用了该方法? 这样做有什么价值吗?

1 个答案:

答案 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]);