Moq拦截FactoryMock新实例

时间:2019-02-07 15:49:22

标签: .net moq xunit

我有一个带有Create方法的Factory类,该方法返回IFoo对象。我创建了一个FactoryMock类,该类将接口实现为虚拟方法,并返回具有基本功能的IFoo模拟设置。到目前为止一切顺利。

如果被测方法返回IFoo,则一切正常,IFoo被创建并使用,我可以确保它被正确使用。

但是,如果所测试的方法未返回IFoo,我该如何截取从工厂创建的IFoo对象?

我可以做类似的事情...但是我可以从Callback中访问CallBase返回值吗?

var factory = new Mock<FactoryMock>() { CallBase = true };
factory.Setup(x => x.Create).CallBase().Callback(() => ...);

另一个选择是将LastCreated属性添加到FactoryMock。在这种情况下,推荐的方法是什么?

1 个答案:

答案 0 :(得分:0)

由于没有任何回应,我找到了一种简单的方法来解决它。在FactoryMock中,我仅添加一个公共属性“ public List Instances”,其中包含工厂创建的所有实例。然后,我可以轻松访问这些实例,并且可以直接使用FactoryMock,而无需在其周围包装Moq。但是将IFoo对象作为Moq类型返回。不知道其他人是否这样做,但这对我来说已经足够了。

编辑:我意识到我在做单元测试错误。在这种情况下,我专注于“如何完成”而不是最终结果,实际上,我正在打破大多数最佳实践。如果有人问相同的问题,那么这是有关进行测试的最佳实践的良好文档。现在需要重写所有内容:)

https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices