【发布时间】:2015-10-08 13:38:50
【问题描述】:
我正在尝试使用 NSubstitute 来模拟来自 Substitute 的返回值,但由于方法签名使用的是 Func,因此我无法让替代品返回正确的值。
我已经看到了这些问题,但无法使其与我的 Func 一起使用。
Mocking Action<T> with NSubstitute
Mocking out expression with NSubstitute
我尝试模拟的界面是这样的(有点简单):
public interface IOrgTreeRepository<out T> where T : IHierarchicalUnit
{
T FirstOrDefault(Func<T, bool> predicate);
}
我用 NSubstitute 代替它,如下所示:
_orgTreeRepository = Substitute.For<IOrgTreeRepository<IOrganizationUnit>>();
然后我尝试像这样更改返回值:
_orgTreeRepository.FirstOrDefault(Arg.Is<Func<IOrganizationUnit, bool>>(x => x.Id== _itemsToUpdate[0].Id)).Returns(existingItems[0]);
但它只是返回一个代理对象而不是我在 existingItems 中定义的对象。
但是,多亏了其他问题,我设法让它工作,但这对我没有帮助,因为我每次都需要一个特定的项目。
_orgTreeRepository.FirstOrDefault(Arg.Any<Func<IOrganizationUnit, bool>>()).Returns(existingItems[0]); // Semi-working
我猜它会将 lambda 表达式视为一种绝对引用,因此会跳过它?有什么方法可以模拟返回值吗?
【问题讨论】:
标签: c# unit-testing nsubstitute