使用Moq进行有状态和无状态测试

时间:2014-10-30 21:32:34

标签: c# mocking moq

实施问题。

我有一个Builder方法FooBuilder(),可以调用许多东西来构建FooModel模型。

FooBuilder()有一些相互依赖的方法,例如调用BarBuilder的Tire(barBuilder),以及许多不依赖于任何执行顺序的SteeringWheel。

示例:

 [Test]
        public void then_should_build_steering_wheel_model()
        {
            // Arrange
            var FooBuilder = new FooBuilder();   
            var itemKey = new ItemKey{Vendor = 10};

            //Here's the setup of BarBuilder for other classes elsewhere
            var BarBuilder = new Mock<IBarBuilder>();
             BarBuilder.Setup(builder =>  builder.BuildUpBarMaster(itemKey.Vendor)).Returns(BarModel);


            // Act
            FooBuilder.CreateSteeringWheelModel(itemKey.vendor);

            // Assert
            FooBuilder.Verify(builder => builder.BuildUpSteeringWheelModel(itemKey.vendor));

有没有办法为无状态的方法(SteeringWheel)构建测试而不进行有状态部分的设置(BarBuilder)?

1 个答案:

答案 0 :(得分:0)

我发现这个解决方案使BarBuilder不返回BarBuilder模型的实例,而是返回需要传递给该行的原始类型。

原语允许Moq成功忽略有关我收到的空对象的null方法依赖关系的错误。然后,Moq会传入0并且按预期运行程序,让我只使用.Setup来处理我实际需要的事情。